如何以最早的日期返回记录?

时间:2017-06-12 12:08:54

标签: sql sql-server tsql sql-server-2014

我需要为每个不同的学生ID返回第一条记录。在我的示例代码中,我有一条记录在同一天有两个事件,另一个学生在不同日期有多个事件。

我需要选择最早的日期,如果同一天发生了多个日期,那么最早的事件ID将作为下一个标准。这样做的好方法是什么?

我在这个数据集中有大约35列,但为了简洁起见,仅包括前面的5个列。

数据:

Picture of data

期望的结果:

Picture of desired results

示例代码如下。

  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

谢谢。

2 个答案:

答案 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 )