如何从日期之间的条件下从数据库表中检索数据?

Posted

技术标签:

【中文标题】如何从日期之间的条件下从数据库表中检索数据?【英文标题】:How to retrieve data from database table with condition in between date? 【发布时间】:2013-05-06 07:35:51 【问题描述】:

我需要检查一段时间内(开始日期和结束日期)的可用酒店和可用房间数量。

我有一个表测试(id、日期、数量、hotel_id)。我需要在数量(例如数量> 2)和两个日期之间的日期(例如:测试表的日期字段的日期值大于 '2013-05-06 ' 并且结束日期小于 '2013-05-10')。

我试过这个查询:

select hotel_id
  from test
 where qty>2
   and date between '2013-05-06' and '2013-05-10';

但是,另一个条件是在给定日期之间必须有所有日期。即日期字段应具有所有日期日期值:'2013-05-06'、'2013-05-07'、'2013-05-08'、'2013-05-09'、'2013-05-10' .如果缺少上述任何日期,则应返回空结果集。如果所有日期都可用 qty>2(let),那么它应该返回 hotel_ids 列表。

如何在单个 mysql 查询中完成?

【问题讨论】:

可能重复 ***.com/a/16393694/1920232。刚刚回答了同样的问题。这是作业吗? 你做对了,有什么问题?如果您对where 子句中的between 感到困惑,请查看MySQL BETWEEN Clasue @KishorSubedi,不,我做得不对。假设日期不包含“2013-05-07”,而只包含“2013-05-06”、“2013-05-08”、“2013-05-09”、“2013-05-10”。然后它应该返回空结果集。因为如果开始日期和结束日期之间有所有可用日期,我需要结果集(酒店 ID)。那么,如何检查开始日期和结束日期之间的所有日期,并在上面的示例中返回 qty>2 的酒店 id??? @peterm 不,这不是家庭作业。我也浏览了你的链接,但那个答案不是我需要的答案。你能帮我解决吗??? 看到这个 [mysql-select-all-data-between-two-dates][1] [1]: ***.com/questions/1080207/… 【参考方案1】:

试试

SELECT `hotel_id`
  FROM test
 WHERE `date` BETWEEN '2013-05-06' AND '2013-05-10'
   AND `qty` >= 2
 GROUP BY `hotel_id`
 HAVING COUNT(*) = (DATEDIFF('2013-05-10', '2013-05-06') + 1)

SQLFiddle

【讨论】:

以上是关于如何从日期之间的条件下从数据库表中检索数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置日期的搜索条件,从数据库中检索该日期的其他详细信息?

在特定条件下从 firebase 数据库中检索数据

如何在不刷新网页的情况下从下拉列表索引更改事件的数据库中检索数据

如何在不让日志文件失控的情况下从巨大的表中删除过期数据?

如何在不监听事件的情况下从 firebase 数据库中检索数据 [重复]

如何通过 SQL 语句从两个特定日期(由用户指定)之间的数据库表中获取数据?