Как выбрать самую старую запись из sql - PullRequest
0 голосов
/ 11 декабря 2018

Таким образом, у меня есть таблица различных оценок, сохраненных для множества различных транспортных средств, и я хочу выбрать все оценки с определенным типом оценки, но может быть более 1 записи для конкретного идентификатора записи с этим типом, и я хочу тольковыберите самый старый

Итак, у меня есть этот запрос (результаты ниже)

select

p.seller_opportunity_id
, p.created_at
, p.created_by
, p.type
, p.pricing_output_quote3_rounded_list_price_usd

    from
      frunk.pricing_events as p
      inner join database.opportunity o
    inner join database.vehicle_c v on
      o.vehicle_id_c = v.id on
        p.seller_opportunity_id = o.id
    where
      o.auto_reject_c is false
      and o.stage_name not in (
        'Lost'
        , 'Sold'
        , 'Handover'
      )
     -- and p.type = 'appraisal-escalated'
      and o.id = 'id'
    order by
      p.created_at desc

, что приводит к этому

URL изображения

Я хочу создать вложенный запрос, в котором я могу получить pricing_output_quote3_rounded_list_price_usd для одного seller_opportunity_id как из типа appraisal-escalated, так и manual-quote со значениями первых записей (их может быть несколько, как показано на скриншоте)

Обратите внимание, что, например, предложение o.id where является сакэ, и в реальном запросе я бы запросил всю таблицу со всеми идентификаторами, поэтому добавление where p.created_at = (select min(p.created_at) from frunk) не сработает

1 Ответ

0 голосов
/ 11 декабря 2018

Используйте функцию ранжирования, например dense_rank.

select *
from (select p.*
            ,dense_rank() over(partition by seller_opportunity_id order by created_at) as rnk
      from appraisals 
      where type = 'appraisal-escalated'
     ) t
where rnk = 1

Подробнее о функции см. В documentation

...