我有一张类似下面的表格:
Id datetime reference key
1 16/1/16 9:00 123456 21
2 16/1/16 9:00 123456 22
3 16/1/16 9:00 123456 23
4 16/1/16 9:00 123456 24
5 16/1/16 9:20 123456 21
6 16/1/16 9:20 123456 22
7 16/1/16 9:20 123456 23
8 16/1/16 9:20 123456 24
9 16/1/16 9:40 123456 21
10 16/1/16 9:40 123456 22
11 16/1/16 9:40 123456 23
12 16/1/16 9:40 123456 24
我想要做的是提取特定键的第一个日期时间,例如22,然后是下一个键22的日期时间。所以在上面的例子中,我只想要id + 2和6。对于单个记录,密钥可能出现3,4,5,6或任何次数,但我只希望它出现的前两次。上面的例子只使用一个由参考123456表示的记录,但可能有数千条记录,我想要所有记录的前两次。
答案 0 :(得分:2)
使用窗口函数:
SELECT *
FROM (
SELECT *,
rn = ROW_NUMBER() OVER(PARTITION BY [reference], [key] ORDER BY [datetime])
FROM your_table) AS sub
WHERE rn <= 2;
的 LiveDemo
强>
如果您想处理关系([reference], [key], [datetime]
不唯一),请改用DENSE_RANK
。