我正在寻找一个查询,它为每个ID提供了最后一条记录(根据日期,给定时间和时间戳)。
在我的情况下,ID是" knr",所以我想要在event_ap中的每个KNR的最后一条记录(与pers_stm匹配以获取名称)。 我只能得到1个ID的结果,但不是所有的结果。
我有这些表(仅有示例,两个表都有超过1万个表)
Ereignis tnr date time knr name maschnr
PAB 2203 2017-01-23 9:00 11 Test1 x222
PAN 2203 2017-01-23 6:00 33 Test3 x222
PAN 2201 2017-01-23 11:00 44 Test4 x222
我想要的是这个
SELECT TOP 1 A.Ereignis, A.tnr, A.date, A.time, A.knr, A.maschnr, B.name
FROM event_ap AS A
JOIN pers_stm AS B on A.knr = B.knr
WHERE A.knr = '11' AND A.date = CONVERT(DATETIME, '23.01.2017') ORDER BY A.time DESC
到目前为止我的查询是这样的。但很明显,有了这个,我只获得了一个ID的最后一个记录,而不是所有与WHERE子句匹配的记录
Math
感谢您的回复
答案 0 :(得分:1)
你可以用这个获得最后的记录:
select * From (
select * from
(
select *, row_number() over (partition by knr order by date desc, time desc) as RN
from event_ap
) X
where RN = 1
) Y join pers_stm p pn p.knr = Y.knr
答案 1 :(得分:0)
可以使用分析row_number
函数。
SELECT *
FROM
(SELECT *,
row_number() over (partition BY knr order by TIME DESC) AS RN
FROM event_ap
WHERE DATE = '2017-01-23'
) t
WHERE rn = 1;
这假定TIME
列的类型为time
。如果没有,请使用CONVERT(time ,timecolumn)