我读了一些关于这个主题的文章,包括: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?!?!?!?
答案 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;