前两次出现的SQL Select语句

时间:2016-01-17 14:11:19

标签: sql sql-server sql-server-2008

我有一张类似下面的表格:

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表示的记录,但可能有数千条记录,我想要所有记录的前两次。

1 个答案:

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