这些查询 MySQL 日期范围之间有啥区别
Posted
技术标签:
【中文标题】这些查询 MySQL 日期范围之间有啥区别【英文标题】:What's the difference between these queries MySQL date range这些查询 MySQL 日期范围之间有什么区别 【发布时间】:2020-12-11 08:14:38 【问题描述】:我有一个名为 order_match 的表与此列
+----+-----------+
| id | createdAt |
+----+-----------+
所以我想进行查询以找出出现在 7 天后的范围内的 ID
我有 2 个查询,idk 哪个是真的,为什么它会变成真的
查询 1
SELECT om.id
FROM order_match om
WHERE om.createdAt >=
DATE_SUB(curdate(), INTERVAL 1 WEEK) AND
om.createdAt <
ADDDATE(DATE_SUB(curdate(), INTERVAL 1 WEEK), INTERVAL 9 DAY)
GROUP BY om.id;
它返回 57 id
查询 2
SELECT om.id
FROM order_match om
WHERE om.createdAt >=
now() - INTERVAL 7 DAY AND
om.createdAt <
now() + INTERVAL 1 DAY
GROUP BY om.id;
它返回 2 个 id
请问哪一个是真的?还是这两个查询都是错误的?
EXPECTED RESULTS
assume curdate = '2020-02-05'
THEN IF the table was become like this
+----+------------+
| id | createdAt |
+----+------------+
| 1 | 2020-02-02 |
| 2 | 2020-02-03 |
| 3 | 2020-02-04 |
+----+------------+
THEN all of the ID are included because the ids was on the range between 2020-02-05 and 7 days behind (2020-01-30 00:00:00)
【问题讨论】:
出现在 7 天后的范围内的 ID - 您需要比这更具体。 好的,让我编辑一下 您能否分享示例数据,以便其他人可以重现该问题? 完成先生,我已经输入了预期的结果 两者都不是。在没有任何聚合函数的情况下,GROUP BY 子句永远不合适 【参考方案1】:您的第一个查询发现从 7 天前的午夜开始的 9 天范围;您的第二个查询仅找到从 当前时间 7 天前开始的 8 天范围。由于范围不同,结果不同也就不足为奇了。
【讨论】:
那么根据我的预期结果,那哪个是真的? 我不知道你所说的“真实”是什么意思。任何一个都应该返回样本数据的所有三个记录。 是的,但根据我的真实数据,用户数量存在显着差异。 是的,因为他们两个从不同的最早点开始选择不同长度的范围。我试图解释这两个查询的作用;只有你可以决定你的意思是什么,如果要么以上是关于这些查询 MySQL 日期范围之间有啥区别的主要内容,如果未能解决你的问题,请参考以下文章
PHP/MySQL:对数据库中的重复事件进行建模,但查询日期范围
MySQL 用 BETWEEN AND 日期查询包含范围边界