2013-08-05 14 views
0

我阅读了一些关于这个主题的文章,包括:Use of GROUP BY twice in MySQL,知道这应该是我需要的相同逻辑,但我不知道如何应用它。使用max和group的两倍

请注意,我知道模式是可怕的(我仍然不明白为什么版本和发布的表是分开的,例如...),但我没有任何权力来改变它。

(我有我有,所以我会用使用的电影,而不是一个示例模型我的问题,工作的一些敏感信息。)

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,扩展版本,最新_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?!?!?!? 

回答

1

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

group by titleid THEN editionID 

到:

group by titleid, editionID 
+0

完美!你救了我几个小时的痛苦,并教我新的东西!我不能够感谢你! (有时候我们认为一个问题需要一个复杂的解决方案,但实际上只需要一个相对简单的解决方案,但我们必须寻找它才能看到它!) – Sarah

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; 
+0

这仍然会列出所有版本,而不仅仅是最新的每'(titleid,editionid)'。我不认为MySQL支持行功能。 – Andomar