Запрос к группировке по на основе даты заказа - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть таблица, такая как:

enter image description here

Я хочу сжать ее с датами, чтобы получить:

enter image description here

Я использовал 'GROUP BY', но он не работал, так как он объединял все буквы 'T'.Как заставить SQL Server сохранять порядок в качестве его группировки?

1 Ответ

1 голос
/ 24 сентября 2019

Это типичная проблема пробелов и островов.Вы можете назначить номера строк записям в группах записей, имеющих одинаковые значения name, и в группах, имеющих одинаковые значения name и type.Разница между номерами строк дает вам группу, к которой принадлежит каждая запись.

Рассмотрим:

SELECT 
   name,
   MIN(date) FromDate,
   MAX(date) ToDate,
   type
FROM (
    SELECT 
        t.*,
        ROW_NUMBER() OVER(PARTITION BY name ORDER BY date) rn1,
        ROW_NUMBER() OVER(PARTITION BY name, type ORDER BY date) rn2
    FROM mytable t
) x
GROUP BY name, rn1 - rn2, type
ORDER BY name, FromDate

Демонстрация на DB Fiddle :

name | FromDate |   ToDate | type
:--- | -------: | -------: | :---
Jack | 19700715 | 19890831 | T   
Jack | 19910920 | 19920526 | N   
Jack | 19930409 | 20160411 | T   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...