0

我阅读了一些关于这个主题的文章,包括:在 MySQL 中使用 GROUP BY 两次,并且知道这应该是我需要的相同逻辑,但我只是不知道如何应用它。

请注意,我知道架构很糟糕(例如,我仍然不明白为什么版本和发布的表是分开的……)但我没有任何权力来改变它。

(我有一些我正在使用的敏感信息,所以我将使用一个使用电影的示例来模拟我的问题。)

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?!?!?!?
4

2 回答 2

1

您可以通过用逗号分隔多个列来对它们进行分组。改变:

group by titleid THEN editionID

至:

group by titleid, editionID
于 2013-08-05T14:11:12.060 回答
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;
于 2013-08-05T14:07:12.100 回答