SQL 查询开始和结束日期

Posted

技术标签:

【中文标题】SQL 查询开始和结束日期【英文标题】:SQL Query Start and End Date 【发布时间】:2011-09-02 08:30:43 【问题描述】:

这与此略有不同: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 日,则它是开始日期和结束日期。

【问题讨论】:

解释一下为什么这个输出是正确的,然后我们可以帮你查询 您应该说明您是如何到达这些结束日期的,尤其是 9 月 8 日。 我只是想解释一下。希望对您有所帮助。 哎呀,9 月 8 日错了,应该是 9 月 7 日 @Anon,您使用的是哪个版本的 SQL(Oracle、SQLServer、mysql、PostgreSQL 等)? SQL 风格之间的日期操作差异很大。 【参考方案1】:

不确定这是否是最好的方法。您可以先过滤所有具有前一天和第二天的日期,然后您可以使用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 

【讨论】:

以上是关于SQL 查询开始和结束日期的主要内容,如果未能解决你的问题,请参考以下文章

ms-sql 如何查询开始时间与结束时间之间的数据?

我的SQL查询正在处理一个日期,但我希望开始日期到结束日期

T-Sql 每年获取员工开始和结束日期

SQL Server连续日期 - 将多行汇总为连续的开始和结束日期行,而不包含CTE,循环,... s

获取开始日期和结束日期之间的日期

从SQL Server中的周数获取周开始日期和周结束日期