使用max和group两次

时间:2013-08-05 14:02:43

标签: sql max

我读了一些关于这个主题的文章,包括:Use of GROUP BY twice in 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

我想返回行,每行都是其中一个标题的版本。对于每个版本的标题,我想返回最新发布的日期,无论媒体如何。

E.g:

好动作#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 个答案:

答案 0 :(得分:1)

您可以通过用逗号分隔多个列来分组。变化:

group by titleid THEN editionID

为:

group by titleid, editionID

答案 1 :(得分:0)

您需要的是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;