mysql - 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 日的上周。错过了什么?
编辑 1 上面的 WHERE 子句是我被告知在另一位用户的建议下移动到某个时间点的内容。我以前一直在使用 CURDATE() 然后是 X 和 Y 之间的间隔来获得一周前,不包括本周和过去 7 天。以下是以下查询的结果:
select post_id,DeliveryDate from table where deliverydate >= now() - interval 1 week
解决方案
如果您想查看 DeliveryDate 是否在前一周(每周从星期一开始),请执行以下操作:
AND YEARWEEK(DeliveryDate, 1) = YEARWEEK(CURDATE() - INTERVAL 1 WEEK, 1)
调整周的回报在年份范围内效果不佳,单独检查周和年可能会以多种方式出错,并且使用不同模式比较周值不会有任何用处。
推荐阅读
- ruby-on-rails - 如何运行 rake 运动鞋:运行
- android - Flutter local_auth 无法使用默认系统对话框进行指纹识别
- python - 将 2 个不同的行更改为单行而不在 Pandas 中进行旋转(当数据框不是 Mulitindex 时)
- javascript - 当我更新相机时,Raycaster 不会停留在中心
- angular - 如何在角度垫步进器中禁用步骤标题中的特定步骤
- python - 基于python中的计数的计时器
- python-3.x - 使用 Scrapy 获取所有文章
- sql - 如何将时间戳数据添加到 PostgreSQL 表中?
- ios - SwiftUI:整个屏幕的背景颜色而不是简单的视图?
- mysql - 数据库设计 - 如何以独特的方式将一个表与其他两个表关联起来?