【问题标题】:Finding data for dates that fall in certain range查找特定范围内日期的数据
【发布时间】:2022-07-04 16:05:41
【问题描述】:

我在尝试计算 MySQL 中 2021 年 1 月至 2021 年 3 月底时间范围内的一系列度假租赁的入住率时遇到了问题。我意识到我遇到了排除在时间范围之前开始但在此期间继续或在时间范围之后结束的租金的问题(例如,在 2021 年 12 月入住但在 2021 年 1 月中旬退房,在 2021 年 12 月入住和2021 年 4 月结帐等)。作为最近重新使用 SQL 的人,我在想办法将这些也包括在内时遇到了麻烦。我相信这是最好的方法 - 对那些较早入住或稍后退房的人使用 DATEDIFF 函数,给我一个负数,然后我可以从他们的逗留时间中减去,以便给我在此时间段内度过的夜数。我无法弄清楚我的语法在哪里不正确,因为我在第 14 行不断收到 ERROR 1064。如果您对实现此目的的最佳方法有任何其他建议,请在我尝试学习时分享它们在 MySQL 中完成工作的最佳方式。

这是我当前的代码:

SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
SELECT 
bookings.`listing_id`,
bookings.`checkin_date`,
CASE
  WHEN DATEDIFF(bookings.`checkin_date`,'2021-04-01') < 0
    THEN DATEDIFF(bookings.`checkin_date`,'2021-04-01')
      ELSE 0
END AS `OccBeginning`,
bookings.`checkout_date`,
CASE
  WHEN DATEDIFF('2021-07-31',bookings.`checkout_date`) < 0
    THEN DATEDIFF('2021-07-31',bookings.`checkout_date`)
      ELSE 0
  FROM bookings
    WHERE bookings.`type` = 'guest' AND bookings.`cancelled` = '0'
     GROUP BY bookings.`listing_id`;

【问题讨论】:

  • 这是我当前的代码 这不是完整的代码,而是一个片段。因此,无法定义发生错误的“第 14 行”是什么。 PS,请使用 LEAST()/GREATEST() 而不是您的 CASE。

标签: mysql


【解决方案1】:

如果这是您的完整代码,那么第 14 行就是ELSE 0,就在FROM bookings 之前。语法错误是你没有结束case语句。

即代替

CASE
  WHEN DATEDIFF('2021-07-31',bookings.`checkout_date`) < 0
    THEN DATEDIFF('2021-07-31',bookings.`checkout_date`)
      ELSE 0
  FROM bookings

你应该有

CASE
  WHEN DATEDIFF('2021-07-31',bookings.`checkout_date`) < 0
    THEN DATEDIFF('2021-07-31',bookings.`checkout_date`)
      ELSE 0
END -- <-------------- needs the END here
  FROM bookings

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 2021-07-13
    • 2016-09-22
    相关资源
    最近更新 更多