SQL Server查询;每个ID的最后记录

时间:2017-01-23 18:02:19

标签: sql-server

我正在寻找一个查询,它为每个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

感谢您的回复

2 个答案:

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