用mysql查找日期空白

用mysql查找日期空白,第1张

概述我想提取具有空的bookingId的记录并获得最多未预订的天数(从第一个免费日).预期结果应该是:id = 1, 2013-08-03, 7 days free id = 1, 2013-08-24, 7 days free id = 2, 2013-08-07, 10 days free id = 2, 2013-08-24, 7 days free 最好

我想提取具有空的bookingID的记录并获得最多未预订的天数(从第一个免费日).预期结果应该是:

ID = 1,2013-08-03,7 days freeID = 1,2013-08-24,7 days freeID = 2,2013-08-07,10 days freeID = 2,7 days free

最好的事情是,如果我还可以查询免费时间段:例如查询1,2,3,4,5,6,7..14 ..免费日.这是我的源数据的一个示例:

ID      bookingDate    bookingID--------------------------------1        2013-08-03        01        2013-08-04        01        2013-08-05        01        2013-08-06        01        2013-08-07        01        2013-08-08        01        2013-08-09        01        2013-08-10        1121        2013-08-11        1121        2013-08-12        1121        2013-08-13        1121        2013-08-14        1121        2013-08-15        1121        2013-08-16        1121        2013-08-17        1121        2013-08-18        1121        2013-08-19        1121        2013-08-20        1121        2013-08-21        1121        2013-08-22        1121        2013-08-23        1121        2013-08-24        01        2013-08-25        01        2013-08-26        01        2013-08-27        01        2013-08-28        01        2013-08-29        01        2013-08-30        01        2013-08-31        02        2013-08-03        782        2013-08-04        782        2013-08-05        782        2013-08-06        782        2013-08-07        02        2013-08-08        02        2013-08-09        02        2013-08-10        02        2013-08-11        02        2013-08-12        02        2013-08-13        02        2013-08-14        02        2013-08-15        02        2013-08-16        02        2013-08-17        392        2013-08-18        392        2013-08-19        392        2013-08-20        392        2013-08-21        392        2013-08-22        392        2013-08-23        392        2013-08-24        02        2013-08-25        02        2013-08-26        02        2013-08-27        02        2013-08-28        02        2013-08-29        02        2013-08-30        02        2013-08-31        0

如果有人对更好的数据结构有个好主意,我可以尝试实现.该数据库仍在建设中:-)

编辑:

CREATE table IF NOT EXISTS `pricesBookings` (  `ID` int(11) NOT NulL auto_INCREMENT,`baseID` int(11) NOT NulL,`bookingDate` date NOT NulL,`bookingID` int(11) NOT NulL,`price` decimal(10,2) NOT NulL,PRIMARY KEY (`ID`),UNIQUE KEY `baseID` (`baseID`,`bookingDate`)) ENGINE=InnoDB  DEFAulT CHARSET=utf8;
最佳答案这应该给出正确的结果:

select  ID,min(startDate) as startFreeDate,count(*) - (endDate is null) numFreeDaysfrom (  select    pb1.ID,pb1.bookingDate startDate,min(pb2.bookingDate) endDate  from    pricesBookings pb1 left join pricesBookings pb2    on pb1.ID=pb2.ID       and pb2.price>0       and pb2.bookingDate>pb1.bookingDate  where    pb1.price=0  group by    pb1.ID,pb1.bookingDate) sgroup by ID,endDateorder by ID,startDate

看它here.

如果您需要搜索所有免费插槽,例如14天,您可以添加HAVING:

group by ID,endDatehaving count(*) - (endDate is null) >= 14order by ID,startDate
总结

以上是内存溢出为你收集整理的用mysql查找日期空白全部内容,希望文章能够帮你解决用mysql查找日期空白所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1168484.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存