JM1*_*JM1 3 sql t-sql sql-server sql-server-2014
我需要为每个不同的学生ID返回第一条记录.在我的示例代码中,我有一条记录在同一天有两个事件,另一个学生在不同日期有多个事件.
我需要选择最早的日期,如果在同一天发生了多个日期,那么最早的事件ID将作为下一个标准.这样做的好方法是什么?
我在这个数据集中有大约35列,但为了简洁,仅包括下面的前5列.
数据:
期望的结果:
示例代码如下.
CREATE TABLE #TEMP (
StudentID float,
SchoolID float,
StudentNameFull nvarchar(255),
IncidentID float,
IncidentDate date
)
INSERT INTO #TEMP (StudentID, SchoolID, StudentNameFull, IncidentID, IncidentDate)
VALUES
(1111111, 406, 'Smith,John', 123321, '20170501'),
(1111111, 406, 'Smith,John', 123322, '20170501'),
(2222222, 406, 'Jones,Tim', 654789, '20170501'),
(2222222, 406, 'Jones,Tim', 659872, '20170503'),
(2222222, 406, 'Jones,Tim', 478978, '20170508')
SELECT * FROM #TEMP
Run Code Online (Sandbox Code Playgroud)
谢谢.
在SQL Server中,您可以使用ROW_NUMBER()以下命令执行此操作:
select t.*
from (select t.*,
row_number() over (partition by StudentId order by IncidentDate, IncidentID) as seqnum
from #TEMP t
) t
where seqnum = 1;
Run Code Online (Sandbox Code Playgroud)
这将"最容易发生的事件"解释为"具有最小值的事件".
您可以与Row_Number()一起使用With Ties子句
SELECT Top 1 with Ties *
FROM #TEMP
Order By Row_Number() over (Partition By StudentID Order by IncidentDate,IncidentID )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
113 次 |
| 最近记录: |