MYSQL 根据前一周的最后日期默认结束日期

问题描述 投票:0回答:2

如何使 in_date 的结束日期始终基于前一周的最后日期? 例如,今天是 2023 年 4 月 24 日,而前一周(周一至周日)的最后日期是 16/04/2023

预期的 SQL 查询:

SELECT ga.in_date,
        FROM in_txn ga
        LEFT JOIN cntr_mst cm ON cm.cntr_num = ga.cntr_num
        WHERE status_active = 'A'
        and (in_date between '2020-01-01 00:00:00' and '2023-4-16 23:59:59')
sql mysql where-clause date-arithmetic
2个回答
0
投票

我建议:

SELECT
    ga.in_date,
    DATE_SUB(DATE_ADD(DATE(ga.in_date), INTERVAL(1-DAYOFWEEK(ga.in_date)) DAY), INTERVAL 1 DAY) AS the_new_date
FROM in_txn ga
LEFT JOIN cntr_mst cm ON cm.cntr_num = ga.cntr_num
WHERE status_active = 'A' 
AND in_date >= '2020-01-01 00:00:00' AND in_date < '2023-4-17 00:00:00';

还有:

between
很痛苦!因为“23:59:59”可能不是当天的最后一刻(MySQL TIMESTAMP 列的最大精度高达微秒,6 位数字)所以它更容易 - 并且更可靠 - 避免使用它。请注意,我将第二个日期提前了一秒。

见:https://dbfiddle.uk/DL-cJL8n


0
投票

您想过滤从 2020 年初到上周结束的时间。

我们可以使用

current_date
weekday()
计算最后一个星期一(如果是星期一,则为今天)的日期:

current_date - interval weekday(current_date) day

我们可以使用这个表达式进行半开区间过滤,瞧!

WHERE status_active = 'A' 
  AND in_date >= '2020-01-01'
  AND in_date <  current_date - interval weekday(current_date) day
© www.soinside.com 2019 - 2024. All rights reserved.