В table B у меня есть столбец created_at.

Я хочу выбрать все строки из table A, для которых не было создано новых строк в table B за последние 1-2 минуты с момента последней записи.

Если я запустил запрос в таблице ниже в 18:01:01, результат должен включать только tableA_id с идентификатором 1.

Table B
id, tableA_id createdAt
1, 1, 18:00:00
2, 1, 17:59:00
3, 2, 17:59:00
4, 3, 18:01:00

Мой текущий запрос похож на запрос ниже:

SELECT tableA.*
FROM tableA
INNER JOIN tableB ON tableB.tableA_id = tableA.id
WHERE tableB.created_at NOT BETWEEN NOW() AND NOW() - INTERVAL 1 MINUTE
    AND tableB.created_at BETWEEN NOW() - INTERVAL 1 MINUTE AND NOW() - INTERVAL 2 MINUTE
0
Vlad Vladimir Hercules 13 Мар 2019 в 22:21

1 ответ

Лучший ответ

Вам нужна запись missing, вы не можете использовать INNER JOIN, потому что это выведет только существующую запись.

Я не уверен, какой интервал вам нужен. Попробуйте это без записи с 1 минуты в прошлом до настоящего момента.

SELECT tableA.*
FROM tableA
LEFT JOIN tableB ON tableB.tableA_id = tableA.id
                AND tableB.createdAt between now() interval -1 minute and now()
where tableB.tableA_id is null;
2
DanB 13 Мар 2019 в 19:34