Как выбрать каждую строку из таблицы, упорядочив их по самой «последней (временная метка)» связанной строке в объединяемой таблице? - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть таблица с quotes.Каждая цитата может получить feedbacks (цитата имеет много отзывов).

Я хотел бы выбрать * кавычки (конечно, отличные), упорядочив их по самой последней submitted_at дате из таблицы обратной связи по убыванию, для каждой цитаты:

https://www.db -fiddle.com / f / pHTQzkWMYND8CGJcAiu2JC / 3

Я поиграл с PARTITION -классой, но не смог добиться успеха.

Ожидаемый результат отзапрос в примере db-fiddle:

3   2017-03-24T00:00:00.000Z    Cata
1   2017-01-02T00:00:00.000Z    Radu
4   2017-04-20T00:00:00.000Z    David

Ответы [ 3 ]

0 голосов
/ 28 февраля 2019

Вы можете использовать следующее решение:

SELECT quotes.id, f.submitted_at, buyer_name
FROM quotes INNER JOIN (
    SELECT quote_id, MAX(submitted_at) AS submitted_at 
    FROM feedbacks 
    GROUP BY quote_id
) f ON quotes.id = f.quote_id
ORDER BY f.submitted_at DESC

демо: https://www.db -fiddle.com / f / pHTQzkWMYND8CGJcAiu2JC / 4

0 голосов
/ 28 февраля 2019

Вам не нужно использовать подзапрос, ожидаемый результат очевиден.

SELECT
quotes.ID,max(feedbacks.submitted_at) as submitted_at,buyer_name
FROM quotes 
INNER JOIN feedbacks
ON quotes.id = feedbacks.quote_id
group by quotes.ID,buyer_name
0 голосов
/ 28 февраля 2019

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

select q.id,f.submitted_at, q.buyer_name from 
(
 select *,row_number()over(partition by quote_id order by submitted_at desc) rn
from feedbacks 
) f
join  quotes q on f.quote_id=q.id
where f.rn=1

демонстрационная ссылка

id  submitted_at                buyer_name
1   2017-03-20T00:00:00.000Z    Radu
3   2017-04-25T00:00:00.000Z    Cata
4   2017-01-10T00:00:00.000Z    David
...