Как ограничить группу по оператору одним столбцом
(Извиняюсь, если это звучит знакомо, я удалил и повторно загрузил свой вопрос, так как по ошибке пометил неправильную версию SQL)
У меня есть таблица с данными о встречах, каждая встреча может иметь несколько строк данных по мере обновления связанных данных. Я хочу выбрать последнюю запись для каждой встречи, чтобы понять последний снимок для каждой встречи.
В прикрепленном коде меня заставляют группировать по close_pallets и close_units, что влияет на то, что я вижу (т. е. возвращает несколько строк за встречу). Я хочу группировать только по назначению_id, чтобы получать одну строку для каждой встречи. Как мне это сделать?
SELECT
MAX(appointment_record_version_number),
appointment_id,
appointment_pallets AS close_pallets,
appointment_units AS close_units
FROM
b.dh
WHERE
last_updated_datetime BETWEEN '2023-06-01' AND '2023-06-30'
AND warehouse_id = 'xxx'
GROUP BY
appointment_id,
close_pallets,
close_units
2 ответа
Вы можете использовать бриллиантовое отличие при индивидуальном заказе вместоgroup by
для достижения вашего результата.
SELECT DISTINCT ON (appointment_id)
appointment_record_version_number,
appointment_id,
appointment_pallets AS close_pallets,
appointment_units AS close_units
FROM b.dh
WHERE last_updated_datetime BETWEEN '2023-06-01' AND '2023-06-30'
AND warehouse_id = 'xxx'
ORDER BY appointment_id,
appointment_record_version_number desc; -- pick the biggest one
Это даст вам желаемый результат, используя group by.
SELECT MAX(appointment_record_version_number),
appointment_id,
MAX(appointment_pallets) AS close_pallets,
MAX(appointment_units) AS close_units FROM b.dh WHERE
last_updated_datetime BETWEEN '2023-06-01' AND '2023-06-30'
AND warehouse_id = 'xxx'
GROUP BY
appointment_id