首页 > 解决方案 > MYSQL WHERE 子句,上周同比

问题描述

我在下面有一部分 WHERE 子句,虽然我有这个权利,但我似乎没有:

        AND (WEEK(DeliveryDate, 1) = (WEEK(CURDATE(), 0) - 1))
        AND (YEAR(DeliveryDate) = YEAR(CURDATE())))

根据文档,我认为它的工作方式是这里的“1”(WEEK(DeliveryDate, 1)'告诉它从星期一开始一周。然后这里的“0”= (WEEK(CURDATE(), 0) - 1))告诉它从刚刚结束的那一周开始。然而,这不是正在发生的事情。相反,此表达式计算的是截至 11 月 29 日的那一周,而不是截至 12 月 6 日的上周。错过了什么?使用上述 WHERE 子句运行时的表结果图片

编辑 1 上面的 WHERE 子句是我被告知在另一位用户的建议下移动到某个时间点的内容。我以前一直在使用 CURDATE() 然后是 X 和 Y 之间的间隔来获得一周前,不包括本周和过去 7 天。以下是以下查询的结果:

select post_id,DeliveryDate from table where deliverydate >= now() - interval 1 week 

在此处输入图像描述

标签: mysql

解决方案


如果您想查看 DeliveryDate 是否在前一周(每周从星期一开始),请执行以下操作:

AND YEARWEEK(DeliveryDate, 1) = YEARWEEK(CURDATE() - INTERVAL 1 WEEK, 1)

调整周的回报在年份范围内效果不佳,单独检查周和年可能会以多种方式出错,并且使用不同模式比较周值不会有任何用处。


推荐阅读