好吧,假设我的桌子看起来像这样:
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
答案 0 :(得分:5)
我不会在这里放置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
可以轻松翻译其他数据库类型。
答案 1 :(得分:1)
这两个链接会给你一个粗略的想法。
答案 2 :(得分:1)
如果你有像(1,2,3,4,5,..)这样的序列化id,那么你最后可以通过这个查询获得上面的1个额外数据,但你可以省略
下面是mysql查询
选择开始日期,(选择开始日期 - 从tester
开始的第1天间距a.id = b.id +1)作为结束日期来自tester
b