我有一份 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
,这真的很奇怪,有人能告诉我我做错了什么吗?
3条答案
按热度按时间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 = 1365lc8prwob2#
你甚至不需要一个真/假,你可以简单地引用它。
m2.datetime < NOW()
实际上是一个布尔值IF
或者CASE
语句只是多余的:请看这里的小提琴样品。
编辑(将返回1个真值或假值):
请看这里更新的小提琴。
6qqygrtg3#
你不需要使用
MIN
功能,只需使用CASE WHEN
我能做到。