返回startdate和enddate的SQL查询

返回startdate和enddate的SQL查询,sql,join,Sql,Join,我的表格如下: ID Type StartDate EndDate 1 A 20180401 20180420 2 A 20180402 20180420 3 B 20180403 20180420 4 C 20180404 20180420 5 C 20180405 20180420 6 A 20180406 20180420 7 A 20180407 20180420 8 A 20180408

我的表格如下:

ID Type StartDate  EndDate
1   A    20180401  20180420
2   A    20180402  20180420
3   B    20180403  20180420
4   C    20180404  20180420
5   C    20180405  20180420
6   A    20180406  20180420
7   A    20180407  20180420
8   A    20180408  20180420
9   A    20180409  20180420
10  A    20180410  20180420
我想要一份类似以下内容的回报:-

Type  StartDate   EndDate
A     20180401    20180402
B     20180403    20180403
C     20180404    20180405
A     20180406    20180420

有人能帮我解答这个问题吗。

这是一个缺口和孤岛问题的例子。我会使用行号的差异:

select type, min(startdate), max(startdate)
from (select t.*,
             row_number() over (order by id) as seqnum,
             row_number() over (partition by type order by id) as seqnum_1
      from t
     ) t
group by type, (seqnum - seqnum_1)
order by min(startdate);

为什么这样做有点难解释。但是,如果查看子查询的结果,您将看到行号的差异如何识别具有相同值的相邻行。

这是一个间隙和孤岛问题的示例。我会使用行号的差异:

select type, min(startdate), max(startdate)
from (select t.*,
             row_number() over (order by id) as seqnum,
             row_number() over (partition by type order by id) as seqnum_1
      from t
     ) t
group by type, (seqnum - seqnum_1)
order by min(startdate);

为什么这样做有点难解释。但是,如果您查看子查询的结果,您将看到行号的差异如何识别具有相同值的相邻行。

您可以提供更多详细信息吗?这对你整理我的帖子格式问题没有意义。基本上,这是一张患者治疗表。患者于20180401入院,于20180420出院。他每天都接受不同类型的治疗。我想知道的是,在整个住院期间的每个治疗开始日期和结束日期。如果结果是这样的话,您需要将20180402作为A型的结束日期,但在您的数据集中,该日期在结束日期中不存在不,不存在。在第一个表中,endDate是出院日期。只有最后一次治疗以出院日期结束。但在此之前,结束日期将是相同的治疗开始日期。这意味着A型有两天,即20180401和20180402,B型有一天20180403,依此类推……您能提供更多详细信息吗?这对你整理我的帖子格式问题没有意义。基本上,这是一张患者治疗表。患者于20180401入院,于20180420出院。他每天都接受不同类型的治疗。我想知道的是,在整个住院期间的每个治疗开始日期和结束日期。如果结果是这样的话,您需要将20180402作为A型的结束日期,但在您的数据集中,该日期在结束日期中不存在不,不存在。在第一个表中,endDate是出院日期。只有最后一次治疗以出院日期结束。但是在此之前,结束日期将是相同的治疗开始日期。这意味着A型有两天,分别是20180401和20180402,B型有一天是20180403,依此类推……你是个天才。它工作得很好。这正是我想要的。非常感谢你,你真是个天才。它工作得很好。这正是我想要的。非常感谢你。