Используя Макс и сгруппировать в два раза

Я прочитал несколько статей на эту тему, в том числе: Использование GROUP BY дважды в MySQL и знаю, что это должна быть та же логика, что и мне, но я просто не знаю, как ее применять.

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

(У меня есть некоторая конфиденциальная информация, с которой я работаю, поэтому я смоделирую свою проблему на примере с использованием фильмов.)

Tables:

Title
TitleID     MovieTitle
1           Great Movie #1
2           Great Movie #2

Edition
StockNo editionID   EditionText         Media       TitleID
1           1       Regular Edition     DVD         1
2           1       Regular Edition     Blue-ray    1
3           2       Extended Version    DVD         1
4           2       Extended Version    Blue-ray    1
5           1       Regular Edition     DVD         2
6           1       Regular Edition     Blue-ray    2
7           2       Extended Version    DVD         2
8           2       Extended Version    Blue-ray    2

Published
StockNo DatePublished
1       1999.01.01
2       2003.01.01
3       2000.01.01
4       1999.01.01
5       1997.01.01
6       1998.01.01
7       2012.01.01
8       2009.01.01

Я хочу вернуть строки, где каждая строка является изданием одного из названий. Для каждого издания заголовка я хочу вернуть самую последнюю опубликованную дату, независимо от СМИ.

Например:

Отличный ход #1, Обычная версия, Latest_published_date

Отличный фильм № 1, Расширенная версия, Latest_published_date

Отличный ход #2, обычная версия, Latest_published_date

Отличный фильм № 2, расширенная версия, Latest_published_date

Я просто потерян в море логики...

WITH Datespublished AS
(   Select  tt.titleid
            ,ed.editionID
            ,pb.datepublished 
    FROM    title tt
            left join edition ed on tt.titleid=ed.titleid
            left join published pb on pb.stockno=ed.stockno
)


select titleid, editionID, max (datepublished) as maxdate from Datespublished group by titleid THEN editionID?!?!?!?

2 ответа

Решение

Вы можете группировать по нескольким столбцам, разделяя их запятой. Изменить:

group by titleid THEN editionID

чтобы:

group by titleid, editionID

Что вам нужно, так это window функции, в частности, для max(), Ниже приведена максимальная дата публикации для каждого издания:

Select  tt.titleid, ed.editionID, pb.datepublished,
        max(datepublished) over (partition by e.editionId) as EditionPublished
FROM    title tt  left join
        edition ed
        on tt.titleid=ed.titleid left join
        published pb
        on pb.stockno=ed.stockno;
Другие вопросы по тегам