Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询创建开始和结束日期_Sql - Fatal编程技术网

SQL查询创建开始和结束日期

SQL查询创建开始和结束日期,sql,Sql,好吧,假设我有一张这样的桌子: ID | DATE 2 | 2010-08-12 2 | 2010-08-16 2 | 2010-08-17 2 | 2010-12-21 2 | 2010-12-22 2 | 2011-05-25 任何人都知道如何查询它,使数据看起来像 ID | STARTDATE | ENDDATE 2 | 2010-08-12 | 2010-08-15 2 | 2010-08-16 | 2010-08-16 2

好吧,假设我有一张这样的桌子:

 ID   | DATE
 2  | 2010-08-12
 2  | 2010-08-16 
 2  | 2010-08-17 
 2  | 2010-12-21 
 2  | 2010-12-22 
 2  | 2011-05-25 
任何人都知道如何查询它,使数据看起来像

 ID   | STARTDATE  | ENDDATE
 2  | 2010-08-12 | 2010-08-15
 2  | 2010-08-16 | 2010-08-16
 2  | 2010-08-17 | 2010-12-20
 2  | 2010-12-21 | 2010-12-21
 2  | 2010-12-22 | 2010-05-25

这两个链接将给你一个大致的想法


我不会将ID放在这里,因为我认为它与查询无关。如果你愿意,请稍后再放。这是一个MSSQL查询

select tb1.date as startdate,dateadd(d,-1,tb2.date) as enddate
from the_table tb1
join the_table tb2 on tb2.date>tb1.date
left join the_table tb3 on tb1.date<tb3.date and tb3.date<tb2.date
where tb3.date is null
选择tb1.date作为开始日期,选择dateadd(d,-1,tb2.date)作为结束日期
从表tb1
加入tb2.date>tb1.date上的表tb2

左键连接tb1.date上的_表tb3如果您有类似(1,2,3,4,5,…)的序列化id,那么您可以通过此查询获得上述内容,最后使用1个额外数据,但您可以忽略该内容 下面是mysql查询


tester
a中选择startdate(从
tester
a中选择startdate-间隔1天,其中a.id=b.id+1)作为结束日期,从
tester
b

如何计算结束日期?编辑:我想我明白了;第三个结束日期应该是2010-12-20,而不是2010-08-20吗?^:就在新的开始日期之前,詹姆斯,你的目标是什么平台?e、 SQL Server、MySQL?这实际上是一种非常有用的方法,适用于几种情况。很酷。