SQL Group通过返回所有行除外

时间:2018-02-05 16:49:01

标签: sql sql-server datetime group-by max

我想从我的Calls表中找到每个患者最新未安排的记录。

s3 += s2.Substring(7, s2.Length - 7); 

所以查询应该返回:

callID  patientID scheduledDatetime
1       101       1/1/18 12:00:00
2       101       1/1/18 19:00:00
3       101       1/1/18 20:00:00
4       202       2/3/18 00:00:00
5       303       1/1/18 00:00:00
6       303       2/1/18 00:00:00

我到目前为止尝试的是消除了只有一个电话的患者,但我不确定如何过滤掉每位患者的最新电话:

callID  patientID scheduledDatetime
1       101       1/1/18 12:00:00
2       101       1/1/18 19:00:00
5       303       1/1/18 00:00:00

2 个答案:

答案 0 :(得分:3)

使用row_number()的简单方法:

select t.*
from (select t.*, row_number() over (partition by patientid order by scheduleddatetime desc) as seqnm
      from t
     ) t
where seqnum >= 2;

在某些情况下,使用相关子查询可能更有效:

select t.*
from t
where exists (select 1
              from t t2
              where t2.patientid = t.patientid and t2.scheduleddatetime > scheduleddatetime
             );

答案 1 :(得分:0)

您可以使用self join仅捕获具有相关后续记录的记录:

SELECT DISTINCT NotLatestRecord.*
FROM mytable NotLatestRecord
INNER JOIN mytable LaterRecord
ON NotLatestRecord.patientID = LaterRecord.patientID
AND NotLatestRecord.scheduledDatetime < LaterRecord.scheduledDatetime