mysql - 使用两个不同的日期条件计算列中的所有行
问题描述
我正在尝试将两个具有日期条件的计数查询(如下)转换为一个查询。
SELECT COUNT(*) as yesterday FROM orders WHERE DATE(timedate) = DATE(NOW() - INTERVAL 1 DAY)
SELECT COUNT(*) as yesterday FROM orders WHERE DATE(timedate) = DATE(NOW() - INTERVAL 2 DAY)
按照另一个答案的建议,我创建了以下内容,但这似乎在语法上不起作用,我不太清楚为什么。还有另一种方法可以做到这一点吗?我找不到类似的问题
SELECT
SUM(IF(DATE(timedate) = DATE(NOW() - INTERVAL 1 DAY))) AS testcount1,
SUM(IF(DATE(timedate) = DATE(NOW() - INTERVAL 2 DAY))) AS testcount2
FROM
orders
解决方案
您缺少IF
表达式的输出值。你也应该使用CURRENT_DATE()
,所以你不需要转换为DATE
:
SELECT
SUM(IF(DATE(timedate) = CURRENT_DATE() - INTERVAL 1 DAY, 1, 0)) AS testcount1,
SUM(IF(DATE(timedate) = CURRENT_DATE() - INTERVAL 2 DAY, 1, 0)) AS testcount2
FROM
orders
请注意,MySQL 在数字上下文中将布尔表达式视为1
( true
) 或0
( false
),因此您实际上可以SUM
在不需要 的情况下使用IF
:
SELECT
SUM(DATE(timedate) = CURRENT_DATE() - INTERVAL 1 DAY) AS testcount1,
SUM(DATE(timedate) = CURRENT_DATE() - INTERVAL 2 DAY) AS testcount2
FROM
orders
推荐阅读
- c# - 如何强制 DotNet 框架使用 JIT 而不是 NGEN?
- python - 带有 pyserial RS232 的微型开关在 tkinter 线程中启动/停止计时器,但即使停止也继续运行
- django - 在更新模型字段之前,如何确保输入的整数大于当前值?
- python - 从 Kinect 摄像头而不是默认网络摄像头读取以检测帧中的对象
- kubernetes - net::ERR_CONNECTION_RESET 托管 Kubernetes 数字海洋大型有效载荷
- continuous-integration - 如何备份/导出 Gitlab CI 环境变量?
- ios - Swift URLSession DataTask 在应用程序进入后台时失败
- python - Pandas 数据框在一次运行中按不同键进行分区
- android - android studio 用按钮打开活动
- javascript - 如何在画布上制作一系列图像,就好像它是使用 JavaScript 的 Gif