【问题标题】:MySQL query to return a column per date in date range?MySQL查询返回日期范围内每个日期的列?
【发布时间】:2014-12-29 17:18:49
【问题描述】:

让我解释一下我所拥有的以及我想要实现的目标。 我有这样的表。

假设我有表 A:预订

RoomNum     ArrivalDate    DepartureDate
101         2014-12-01     2014-12-03
102         2014-12-02     2014-12-03
103         2014-12-03     2014-12-04
101         2014-12-05     2014-12-06

预期的结果应该如下所示:

RoomNum        Des-01    Des-02    Des-03    Des-04    Des-05    Des-06
101              1         1         1         0         1         1
102              0         1         1         0         0         0
103              0         1         1         0         1         1              

任何想法都将不胜感激。

提前致谢

【问题讨论】:

  • 尝试一下,然后在这里发布?如果你尝试在谷歌上搜索,有很多例子吗?只需要搜索??
  • 您的预期结果显示为“一月”,但您的日期都不是一月。除此之外,并非所有数字都匹配。 103 号房间没有 12 月 5 日或 6 日的日期。
  • 您愿意接受有关数据库架构更改的建议吗?

标签: mysql sql date date-range


【解决方案1】:

您有一个选择,虽然它可能不是高效或动态的,但它是使用 SUM() 函数。在里面,你可以包含一个 case 语句。

在这种情况下,我写了一个案例语句来检查当前日期是否在房间的到达日期和离开日期之间。

SELECT roomnum,
  SUM(CASE WHEN '2014-12-01' BETWEEN arrivalDate AND departureDate THEN 1 ELSE 0 END) AS 'Dec-01',
  SUM(CASE WHEN '2014-12-02' BETWEEN arrivalDate AND departureDate THEN 1 ELSE 0 END) AS 'Dec-02',
  SUM(CASE WHEN '2014-12-03' BETWEEN arrivalDate AND departureDate THEN 1 ELSE 0 END) AS 'Dec-03',
  SUM(CASE WHEN '2014-12-04' BETWEEN arrivalDate AND departureDate THEN 1 ELSE 0 END) AS 'Dec-04',
  SUM(CASE WHEN '2014-12-05' BETWEEN arrivalDate AND departureDate THEN 1 ELSE 0 END) AS 'Dec-05',
  SUM(CASE WHEN '2014-12-06' BETWEEN arrivalDate AND departureDate THEN 1 ELSE 0 END) AS 'Dec-06'
FROM booking
GROUP BY roomnum;

这是SQL Fiddle。

【讨论】:

  • 不,它显示不同的结果。 12 月 2 日在 101 号房间是 0
  • @PrimaSanjaya 对不起,我误解了问题。请查看编辑。
猜你喜欢
  • 1970-01-01
  • 2017-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-31
  • 1970-01-01
  • 2014-01-07
  • 2011-01-01
相关资源
最近更新 更多