Получить данные sql, если имеют конкретное значение - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть эта таблица:

id           device         createdAt                 type
1            700           2018-09-06 10:00:00        atos
2            700           2018-09-06 09:30:00        farkos

Идея состоит в том, чтобы проверить, что за последние x часов у меня в таблице есть только данные type = atos.

В этом случае я хочу получить false в качестве результата. Если эта таблица будет иметь только type = atos в последние часы, ожидаемый результат должен быть истинным.

Я пытался так и после этого проверить с php, но не очень хорошая идея (я хочу сделать это только в sql) без дополнительной обработки:

SELECT * FROM table t 
WHERE t.device = 700 
AND t.createdAt >= '2018-09-05 11:00:00'

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Этот запрос будет делать то, что вы хотите. Он просматривает все записи за указанное время и, если какая-либо из них не является atos, вернет 0 (false). В противном случае он вернет 1 (истина).

SELECT MIN(CASE WHEN t.type != 'atos' THEN 0 ELSE 1 END) 
FROM table1 t
WHERE t.device = 700 AND t.createdAt >= '2018-09-05 11:00:00'

Если вы хотите проверить последние часы, измените предложение WHERE на

WHERE t.device = 700 AND t.createdAt >= NOW() - INTERVAL h HOUR
0 голосов
/ 07 сентября 2018

Случай использования:

SELECT deviceid,case when min(case when type='atos' then 1 else 0 end)=0 then false when min(case when type='atos' then 1 else 0 end)=1 then true end as val FROM table 
t 
WHERE t.device = 700 
AND t.createdAt >= '2018-09-05 11:00:00'

сгруппировать по идентификатору устройства

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...