T SQL получение максимальной и минимальной даты для каждого человека и его номера - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть такой набор данных:

enter image description here

Необходимо получить минимальную и максимальную дату, человека и его номер из каждого кадра :

enter image description here

Пример кода ниже: введите описание ссылки здесь

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 19 февраля 2020

Это похоже на проблему пробелов. Вот один из способов ее решения с помощью оконных функций:

select 
    min(person_date) person_date_start,
    max(person_date) person_date_end,
    person,
    number_one
from (
    select 
        t.*,
        row_number() over(order by person_date) rn1,
        row_number() over(partition by person, number_one order by person_date) rn2
    from mytable t
) t
group by person, number_one, rn1 - rn2

Совершенно неясно, что такое логический c для генерации id во внешнем запросе. Если вы хотите перенумеровать записей, то вы можете использовать row_number():

select 
    row_number() over(order by min(person_date)) id,
    min(person_date) person_date_start,
    max(person_date) person_date_end,
    person,
    number_one
1 голос
/ 19 февраля 2020

Это пример проблемы пробелов и островков. Я бы порекомендовал разницу номеров строк для этого:

select person, number_one, count(*) as cnt,
       min(person_date), max(person_date)
from (select t.*,
             row_number() over (partition by person order by person_date) as seqnum,
             row_number() over (partition by person, number_one order by person_date) as seqnum_2
      from t
     ) t
group by person, (seqnum - seqnum_2)
...