У меня есть 3 таблицы - client
, invoice
и invoice_item
.Мне нужно выбрать всех клиентов, у которых последняя дата покупки меньше указанной даты.Дата покупки сохраняется в таблице invoice_item
, позиции, присвоенные накладной, и накладная, присвоенная клиенту.Вот что я пытался
SELECT c.* FROM client c
INNER JOIN (
SELECT i.client_id as clid, MAX(item.date_created) as mdt
FROM invoice i
INNER JOIN invoice_item item on i.id = item.invoice_id
GROUP BY i.id
) joined
ON joined.clid = c.id
WHERE joined.mdt < date('2017-01-01')
А также
SELECT c.* FROM client c
WHERE c.id IN (
SELECT DISTINCT i.client_id FROM invoice i
INNER JOIN invoice_item item on i.id = item.invoice_id
GROUP BY i.id
HAVING MAX(item.date_created) < date('2017-01-01')
)
Оба запроса возвращают неверный результат, вот запрос, который я использую для проверки правильности:
SELECT MAX(invoice_item.date_created) FROM invoice_item
INNER JOIN invoice i on invoice_item.invoice_id = i.id
WHERE client_id = {some id from the previous query};
Приведенный выше запрос возвращает дату, для некоторых клиентов превышающую 2017-01-01
.
Что я делаю не так?Спасибо.