SQL查询开始和结束日期

时间:2011-09-02 08:30:43

标签: sql oracle10g

这与此略有不同:SQL Query Creating Start and End Dates

我不知道如何用英语吮吸这个问题。

Name | Date
Foo | 1-Sep
Foo | 2-Sep
Foo | 3-Sep
Foo | 5-Sep
Foo | 6-Sep
Foo | 7-Sep

Foo | 1-Dec
Foo | 2-Dec

Foo | 4-Dec
Foo | 5-Dec
Foo | 6-Dec
Foo | 7-Dec
Foo | 8-Dec

Foo | 1-Feb

Foo | 14-Feb
Foo | 15-Feb
Foo | 16-Feb
Foo | 17-Feb
Foo | 18-Feb
Foo | 19-Feb
Foo | 20-Feb

Foo | 22-Feb

我需要使用以下结果创建一个查询

查询结果

Name | Start Date  |  End Date
Foo  |  1-Sep      | 3-Sep
Foo  |  5-Sep      | 7-Sep
Foo  |  4-Dec      | 8-Dec
Foo  |  1-Feb      | 1-Feb
Foo  |  1-Dec      | 2-Dec
Foo  |  14-Feb     | 20-Feb
Foo  |  22-Feb     | 22-Feb

更新:

  • 开始日期:连续几天的第一天
  • 结束日期:连续几天的最后一天
  • 如果一个连续日期中没有包含日期​​,例如上面的2月22日,则它是开始日期和结束日期。

1 个答案:

答案 0 :(得分:0)

不确定它是否是最佳方式。您可以先过滤上一天和第二天的所有日期,然后就可以使用here

中说明的解决方案

过滤不重要日期的查询:

select t1.Name, t.Date from Table t1
left outer join Table t2 on dateadd(d,-1,t1.Date) = t2.Date 
left outer join Table t3 on dateadd(d,1,t1.Date) = t3.Date
where t2.Date is null or t3.Date is null