Как ограничить группу по оператору одним столбцом

(Извиняюсь, если это звучит знакомо, я удалил и повторно загрузил свой вопрос, так как по ошибке пометил неправильную версию 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
Другие вопросы по тегам