加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

用mysql查找日期空白

发布时间:2020-12-11 23:47:22 所属栏目:MySql教程 来源:网络整理
导读:我想提取具有空的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 最好的事情是,如果我还可以查询免费时间段:例如

我想提取具有空的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,7 days free

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

id      bookingDate    bookingId
--------------------------------
1        2013-08-03        0
1        2013-08-04        0
1        2013-08-05        0
1        2013-08-06        0
1        2013-08-07        0
1        2013-08-08        0
1        2013-08-09        0
1        2013-08-10        112
1        2013-08-11        112
1        2013-08-12        112
1        2013-08-13        112
1        2013-08-14        112
1        2013-08-15        112
1        2013-08-16        112
1        2013-08-17        112
1        2013-08-18        112
1        2013-08-19        112
1        2013-08-20        112
1        2013-08-21        112
1        2013-08-22        112
1        2013-08-23        112
1        2013-08-24        0
1        2013-08-25        0
1        2013-08-26        0
1        2013-08-27        0
1        2013-08-28        0
1        2013-08-29        0
1        2013-08-30        0
1        2013-08-31        0
2        2013-08-03        78
2        2013-08-04        78
2        2013-08-05        78
2        2013-08-06        78
2        2013-08-07        0
2        2013-08-08        0
2        2013-08-09        0
2        2013-08-10        0
2        2013-08-11        0
2        2013-08-12        0
2        2013-08-13        0
2        2013-08-14        0
2        2013-08-15        0
2        2013-08-16        0
2        2013-08-17        39
2        2013-08-18        39
2        2013-08-19        39
2        2013-08-20        39
2        2013-08-21        39
2        2013-08-22        39
2        2013-08-23        39
2        2013-08-24        0
2        2013-08-25        0
2        2013-08-26        0
2        2013-08-27        0
2        2013-08-28        0
2        2013-08-29        0
2        2013-08-30        0
2        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) numFreeDays
from (
  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
) s
group by id,endDate
order by id,startDate

看它here.

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

group by id,endDate
having count(*) - (endDate is null) >= 14
order by id,startDate

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读