如何检查记录的datetime字段是否小于当前datetime?

xjreopfe  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(380)

我有一份 match 还没有播放,现在我要知道 datetime 包含确切开始日期和时间的字段小于当前值 datetime . 我怎样才能达到类似的效果?
数据样本

| id | round_id | datetime      
   1     1365     2018-08-19 07:00:00
   2     1365     2018-08-08 11:00:00
   3     1365     2018-07-28 07:00:00
   4     1365     2018-07-27 11:00:00
   5     1365     2018-07-29 07:00:00

如你所见,我们有2个 match 下个月(8月)的那场戏,还有三场 match 本月的演出 July . 所以查询应该返回 true 因为几乎有一场比赛 date 次要的是当前日期,也就是说 match 已经玩过了。如果相反 matches 如果id:3、4、5不在列表中,则查询应返回 false .
我试过的

SELECT COALESCE(MIN(CASE WHEN m2.datetime < NOW() THEN true END), false)
       FROM `match` m2 WHERE m2.round_id = 1365

这个 query 始终返回 true ,这真的很奇怪,有人能告诉我我做错了什么吗?

5gfr0r5j

5gfr0r5j1#

你的错误区域
根据描述,没有必要使用 min 函数,但您使用它的结果是它只返回最小日期 2018-07-27 所以你总是 true 你要做的事就把它去掉 min 你忘了把 else 在您的查询中,请输入,以便它将按照您的期望完美地工作
因为你想要一次约会 min 内部 case when ```
SELECT CASE WHEN min(m2.datetime )< NOW() THEN true else false END
FROM match m2 WHERE m2.round_id = 1365

lc8prwob

lc8prwob2#

你甚至不需要一个真/假,你可以简单地引用它。 m2.datetime < NOW() 实际上是一个布尔值 IF 或者 CASE 语句只是多余的:

SELECT m2.datetime < NOW() AS `is_less_than_today`
FROM `match` m2 WHERE m2.round_id = 1365

请看这里的小提琴样品。
编辑(将返回1个真值或假值):

SELECT SUM(m2.datetime < NOW()) > 0
FROM `match` m2
WHERE m2.round_id = 1365
GROUP BY m2.round_id

请看这里更新的小提琴。

6qqygrtg

6qqygrtg3#

你不需要使用 MIN 功能,只需使用 CASE WHEN 我能做到。

SELECT *,(CASE WHEN m2.datetime < NOW() THEN true else false END)
FROM `match` m2 
WHERE m2.round_id = 1365

相关问题