我想从我的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
答案 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