2012-10-04 3 views
2

У меня есть таблица с колонками Дата и номер, например, так:группы строк в простом SQL

date  Number 
1-1-2012 1 
1-2-2012 1 
1-3-2012 2 
1-4-2012 1 

Я хочу сделать SQL запрос, что группы строк с тем же номером и взять минимальную дату. Группирование может происходить только тогда, когда значение iof Number совпадает с предыдущей/следующей строкой. Таким образом, rsult составляет

date  Number 
1-1-2012 1 
1-3-2012 2 
1-4-2012 1 

.

Cheerz, LORDKAIN

+1

Привет Джо, порядок записи по дате. Как использовать предыдущую/следующую группировку? – lordkain

+0

См. Мой обновленный ответ. –

ответ

6

попробовать это:

WITH CTE AS(
     SELECT * ,ROW_NUMBER() OVER (ORDER BY [DATE]) - 
       ROW_NUMBER() OVER (PARTITION BY NUMBER ORDER BY [DATE]) AS ROW_NUM 
     FROM TABLE1) 
SELECT NUMBER,MIN(DATE) AS DATE 
FROM CTE 
GROUP BY ROW_NUM,NUMBER 
ORDER BY DATE 


SQL fiddle demo

+0

+1 Я пытался сделать то же самое, но ты избил меня. [См. SqlFeddle вашего запроса] (http://sqlfiddle.com/#!3/4c36c/11) – hims056

+1

@ hims056: Большое спасибо. Я пытался создать скрипку ... но это заставило меня ошибиться. Я думал, что функция ROW_NUMBER() работает в скрипте –

+2

SQLFiddle - очень полезный инструмент. И он поддерживает 'ROW_NUMBER()' – hims056

0
SELECT Number, MIN(date) 
FROM table 
GROUP BY Number 
ORDER BY Number 

, так как вы требование немного более конкретно, как об этом? Я не проверял это сам, но что-то, что могло бы работать, учитывая вас требование ..

SELECT date, Number FROM (
SELECT Number, 
(SELECT MIN(date) FROM #table t2 WHERE t1.date <> t2.date AND t1.Number = t2.Number) AS date 
FROM table t1 
) AS a 
GROUP BY number, date 
+1

Не спешите указывать простые вопросы; ваш ответ не достигает того, чего хочет пользователь. – LittleBobbyTables

+0

Кто-то сказал мне однажды «Нет глупых вопросов» – lordkain

+0

Там .. обновил мой комментарий для вас :) А на другой ноте, так как я глуп, почему мое решение не работает? Время учиться чему-то, в моем случае. – tranceporter

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