TSQL 获取每个人的最大和最小日期及其编号

TSQL getting the maximum and minimum date for each person and his number

我有这样的数据集:

需要从每一帧中获取最小和最大日期,人和他的号码:

下面的代码示例:enter link description here

非常感谢!

这是一个缺口和孤岛问题的例子。为此,我建议使用不同的行号:

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)

这看起来像是一个空隙和孤岛问题。这是使用 window 函数解决它的一种方法:

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

很不清楚在外部查询中生成 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