Я выполняю агрегатную функцию для нескольких записей, которые сгруппированы по общему идентификатору. Проблема в том, что я также хочу экспортировать некоторые другие поля, которые могут быть разными в сгруппированных записях, но я хочу получить эти определенные поля из одной из записей (первая, в соответствии с ORDER BY запроса).Связанные с группой записи, но выберите определенные поля только из первой записи
Начиная пример точка:
SELECT
customer_id,
sum(order_total),
referral_code
FROM order
GROUP BY customer_id
ORDER BY date_created
мне нужно запросить код направления, но делать это за пределами агрегатной функции означает, что я группировать по этому полю, а также, и это не то, что я хочу - в этом примере требуется ровно одна строка для каждого клиента. Я действительно забочусь только о реферальном коде из первого порядка, и я рад выкинуть любые последующие коды реферальных сообщений.
Это в PostgreSQL, но, возможно, синтаксис из других БД может быть достаточно похож на работу.
Забракованные решения:
- не может использовать не более() или мин(), поскольку порядок является существенным.
- Подзапрос может работать сначала, но не масштабируется; это чрезвычайно сокращенный пример. Мой фактический запрос содержит десятки таких полей, как referral_code, для которых мне нужен только первый экземпляр, и десятки предложений WHERE, которые, если они будут дублированы в подзапросе, сделают для кошмара обслуживания.
... Интересно выглядит как новая функция для 8.4? К сожалению, нам нужно некоторое время, чтобы перейти к новым версиям после их выпуска, сейчас мы все еще застряли в 8.2 (хотя, надеюсь, не намного дольше ...): \ – David