2016-01-17 3 views
1

я таблицу, которая напоминает ниже:SQL Select заявление для первых двух случаев

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 

То, что я пытаюсь сделать, это извлечь первый DateTime определенного ключа, например, 22, а затем даты и времени из следующего пробел в ключе 22. Таким образом, в приведенном выше примере мне нужно было только id 2 и 6. Ключ мог появиться 3,4,5,6 или любое количество раз для одной записи, но мне нужно только первые два раза. В приведенном выше примере используется только одна запись, обозначенная ссылкой 123456, но могут быть тысячи записей, и я хочу первые два раза всех записей.

+0

[Duplicate] (http://stackoverflow.com/questions/3800551/select-first-row-in-each-group-by-group) общей проблемы [tag: наибольшая n-на-группу] , с чуть-чуть-общей разницей 'n' больше 1. –

ответ

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 вместо этого.

+0

@GordonLinoff Спасибо :) – lad2025

Смежные вопросы