Вот упрощенная версия моей проблемы.У меня есть две таблицы.Каждая таблица имеет уникальное поле идентификатора, но в данном случае оно не имеет значения.
shipments
имеет 3 поля: shipment_id
, receive_by_datetime
и qty
.
deliveries
имеет 4 поля: delivery_id
, shipment_id
, delivered_on_datetime
и qty
.
В shipments
, shipment_id
и receive_by_datetime
поля всегда совпадают.В таблице есть много строк, которые выглядят как дубликаты, основанные на этих двух столбцах (но они не ... другие поля отличаются).
В deliveries
, shipment_id
соответствуетдо таблицы shipments
.Есть также много строк, которые могут показаться дубликатами, основанными на полях delivery_id
и delivered_on_datetime
(но это не так ... существуют другие поля, которые я не перечислил).
Я пытаюсь вытащить по одной строке на агрегат delivered_on_datetime
и receive_by_datetime
, но из-за отношений "многие ко многим" это сложно.Является ли запрос где-то в этом направлении правильным?
SELECT d.delivered_on_datetime, s.receive_by_datetime, SUM(d.qty)
FROM deliveries d
LEFT JOIN (
SELECT DISTINCT s1.shipment_id, s1.receive_by_datetime
FROM shipments s1
) s ON (s.shipment_id = d.shipment_id)
GROUP BY d.delivered_on_datetime, s.receive_by_datetime