我如何查询给定日期范围的mysql并加入两个表?

Posted

技术标签:

【中文标题】我如何查询给定日期范围的mysql并加入两个表?【英文标题】:how I query mysql given date range and joined two tables? 【发布时间】:2018-10-11 18:39:43 【问题描述】:

假设我有两张桌子,一间是租来的。如何获得如下表所示的 mysql 连接结果。

在给定日期范围的每个日期显示第一列中每个 room_id 给定数量的可用性和第二个表格的预订状态。

【问题讨论】:

认真考虑处理应用代码中数据显示的问题 【参考方案1】:

首先,确保fromuntil 是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查询 - 返回两个日期范围相交的日期

帮助形成 mysql 查询以查找给定日期范围的免费(可用)场所/资源

如何在 Hive SQL 中按日期范围独家加入?

年份列与日期范围列的查询性能如何

使用未在 Mysql 中排序的多个日期范围查询给定月份的日期范围间隙

加入两个表并得到结果