我如何查询给定日期范围的mysql并加入两个表?
Posted
技术标签:
【中文标题】我如何查询给定日期范围的mysql并加入两个表?【英文标题】:how I query mysql given date range and joined two tables? 【发布时间】:2018-10-11 18:39:43 【问题描述】:假设我有两张桌子,一间是租来的。如何获得如下表所示的 mysql 连接结果。
在给定日期范围的每个日期显示第一列中每个 room_id 给定数量的可用性和第二个表格的预订状态。
【问题讨论】:
认真考虑处理应用代码中数据显示的问题 【参考方案1】:首先,确保from
和until
是MySQL DATE
类型,而不是存储为字符串。
如果这些列是 MySQL DATE
数据类型,那么我们可以这样做:
SELECT r.id AS room_id
, r.quantity - IFNULL(SUM(IF('2012-12-01' BETWEEN v.from AND v.until, v.quantity, 0)),0) AS `1`
, r.quantity - IFNULL(SUM(IF('2012-12-02' BETWEEN v.from AND v.until, v.quantity, 0)),0) AS `2`
, r.quantity - IFNULL(SUM(IF('2012-12-03' BETWEEN v.from AND v.until, v.quantity, 0)),0) AS `3`
, ...
FROM room r
LEFT
JOIN room_reservation v
ON v.room_id = r.id
AND v.until >= '2012-12-01'
AND v.from <= '2012-12-31'
GROUP BY r.id, r.quantity
ORDER BY r.id
如果这些不是DATE
数据类型,也不是规范YYYY-MM-DD
格式的字符串,那么我们可以使用MySQL 的STR_TO_DATE
函数转换为DATE
。 SQL 会有点混乱。
【讨论】:
我确实想出了这样的查询,我想,会有一个查询来生成给定日期范围的日期列,而不是动态生成它。在这个问题中,***.com/a/9296238 查询生成日期。我想知道,如果 mysql 能够制作某种数据透视表 问题中没有任何迹象表明您已经有这样的查询。在提出问题时,展示您尝试过的内容会很有帮助。必须在 SQL 中指定要返回的列数、数据类型和每列的名称;这在单个 SELECT 语句的上下文中不能是动态的。当然,还有其他模式会返回等效结果。在单独的行上返回结果会更简单,按行而不是按列。但是如果我们需要将结果返回为 31 列,那么条件聚合就是要走的路。以上是关于我如何查询给定日期范围的mysql并加入两个表?的主要内容,如果未能解决你的问题,请参考以下文章
帮助形成 mysql 查询以查找给定日期范围的免费(可用)场所/资源