У меня есть список 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
которые играют в следующем месяце (август), и три 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
, и это действительно странно, может кто-то сказать мне, что я сделал не так?
Вы даже не нуждаетесь в истинном/ложном, вы можете просто просто ссылаться на него. m2.datetime < NOW()
на самом деле является логическим, и добавление IF
или CASE
оператора просто избыточно:
SELECT m2.datetime < NOW() AS 'is_less_than_today'
FROM 'match' m2 WHERE m2.round_id = 1365
См. Образец скрипта here.
EDIT (вернет 1 истинное или ложное значение):
SELECT SUM(m2.datetime < NOW()) > 0
FROM 'match' m2
WHERE m2.round_id = 1365
GROUP BY m2.round_id
См. Обновленную скрипту here.
Вам не нужно использовать функцию MIN
, просто используйте CASE WHEN
может это сделать.
SELECT *,(CASE WHEN m2.datetime < NOW() THEN true else false END)
FROM 'match' m2
WHERE m2.round_id = 1365
Ваша область ошибок
Согласно описанию нет необходимости использовать функцию min
но вы использовали ее, в результате она возвращает только минимальную дату, которая составляет 2018-07-27
поэтому вы всегда были true
То, что вам нужно сделать, просто удалить min
и вы забыли поместить else
в свой запрос, так что положите, что он будет работать отлично, как ваше ожидание
как вы хотите одноразового использования даты min
внутри case when
, case when
SELECT CASE WHEN min(m2.datetime )< NOW() THEN true else false END
FROM 'match' m2 WHERE m2.round_id = 1365