无法获取日期时间小于系统日期的记录

时间:2019-01-10 19:40:14

标签: mysql sql

我正在尝试检查记录列表是否比系统datetimedatetime,这些记录还必须具有等于status的字段12。我所做的是:

SELECT SUM(m2.datetime < NOW() AND m2.status IN (1, 2)) < 0 AS result 
FROM `match` m2 WHERE m2.round_id = @round_id GROUP BY m2.round_id

此查询在以下情况下不起作用:

id | datetime              | status |
 1    2018-11-30 18:00:00      5
 2    2018-12-09 13:30:00      5
 3    2018-12-15 14:00:00      5
 4    2018-12-21 13:30:00      5
 5    2019-01-08 17:45:00      1

从上面显示的记录列表中可以看到,我有4条状态为5的记录,并且所有这些记录的日期都小于当前系统datetime的日期。现在,我还有一条状态为1的记录,该记录的日期时间小于当前日期,因此查询的结果应为true,因为有一条记录具有{{ 1}}等于status,并且比系统1datetime。为什么查询返回假?

2 个答案:

答案 0 :(得分:1)

如果要计数,请删除< 0

SELECT round_id, SUM(m2.datetime < NOW() AND m2.status IN (1, 2))AS result 
FROM `match` m2
WHERE m2.round_id = @round_id
GROUP BY m2.round_id

或者更好的是,将条件移至where子句:

SELECT COUNT(*) AS result 
FROM `match` m2
WHERE m2.round_id = @round_id AND
      m2.datetime < NOW() AND m2.status IN (1, 2)

答案 1 :(得分:1)

比较永远不会返回小于0的值,因为如果我正确理解了您想返回true的话,就不需要比较,而且我也看不到SUM的需要,所以我将查询更改为

SELECT (m2.datetime < NOW() AND m2.status IN (1, 2)) AS result 
FROM `match` m2 WHERE m2.round_id = @round_id