我需要为每个不同的学生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
谢谢。
答案 0 :(得分:6)
在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;
这解释了最容易发生的事件" as" incidentId具有最小值"。
答案 1 :(得分:5)
您可以与 Row_Number()
一起使用 With Ties 子句 SELECT Top 1 with Ties *
FROM #TEMP
Order By Row_Number() over (Partition By StudentID Order by IncidentDate,IncidentID )