2016-01-29 87 views
0
select city, title, releasedate 
from movies join shownat on shownat.movietitle = movies.title join theatres on theatres.theatrename = shownat.theatrename 
group by city, title, releasedate 
order by city, max(releasedate) desc; 

以上是我的查询,并解决了这个问题。sql - 聚合最大功能和组

找到每个城市中显示的最新电影的标题。显示按城市名称和电影标题排序的城市名称和最新电影标题。

标准化的数据有3个表称为剧院,如图和电影。是的,我意识到发布日期可能会更加高效,对我来说更有意义,因为并不总是视频始终在同一日期的同一地区或城市发布。然而,这是我最后的作业问题,我坚持。 需要的是,该城市应该只有1个上市。我以为城市的团队会照顾这个。对于每个城市,我需要数据集中每个特定城市(4个)具有最新发布日期的电影标题。我不确定为什么我在这里得到重复的时候,当我有这个功能的组和功能来处理聚合最大功能。最大功能应该给我最新的版本是吗?

"CITY"   "TITLE"  "RELEASEDATE" 
"Cincinnati" "Interstellar" 07-NOV-14 
"Cincinnati" "Big Hero 6" 07-NOV-14 
"Cincinnati" "Nightcrawler" 31-OCT-14 
"Cincinnati" "Gone Girl"  03-OCT-14 
"Cincinnati" "The Pianist" 03-JAN-03 
"Cincinnati" "Fargo" 05-APR-96 
"Cincinnati" "Schindler's List" 04-FEB-94 
"Florence"  "Big Hero 6" 07-NOV-14 
"Florence"  "Interstellar" 07-NOV-14 
"Florence"  "Nightcrawler" 31-OCT-14 
"Florence" "Gone Girl" 03-OCT-14 
"Florence" "District 9" 14-AUG-09 
"Florence" "A Perfect Getaway" 07-AUG-09 
"Florence" "Aliens in the Attic" 31-JUL-09 
"Florence" "Away We Go" 26-JUN-09 
"Florence" "Up" 29-MAY-09 
"Florence" "Star Trek" 08-MAY-09 
"Florence" "The Hurt Locker" 10-OCT-08 
"Florence" "The Dark Knight" 18-JUL-08 
"Florence" "The Departed" 06-OCT-06 
"Florence" "The Green Mile" 10-DEC-99 
"Newport" "Interstellar" 07-NOV-14 
"Newport" "Big Hero 6" 07-NOV-14 
"Newport" "Gone Girl" 03-OCT-14 
"Newport" "District 9" 14-AUG-09 
"Newport" "A Perfect Getaway" 07-AUG-09 
"Newport" "Away We Go" 26-JUN-09 
"Newport" "Up" 29-MAY-09 
"Newport" "The Departed" 06-OCT-06 
"Wilder" "Big Hero 6" 07-NOV-14 
"Wilder" "Interstellar" 07-NOV-14 
"Wilder" "Gone Girl" 03-OCT-14 
"Wilder" "Public Enemies" 01-JUL-09 
"Wilder" "The Departed" 06-OCT-06 
+1

max()进入查询的选定部分。 –

+0

但在城市里,它仍然给我倍数。我意识到独特可以照顾到这一点,但我还以为小组会呢? – camdixon

+0

每个城市只有一次,返回最新日期的行?要么不存在,要么自我加入! – jarlh

回答

1

这将是查询,但我不能肯定是否会最大的功能与日期变量的工作原理:

SELECT city, title, max (releasedate) as max_dateRelease 
FROM movies inner join shownat on shownat.movietitle = movies.title join theatres 
on theatres.theatrename = shownat.theatrename 
GROUP BY city, title, releasedate 
ORDER BY city, max_dateRelease desc 
+0

不要“GROUP BY”你正在聚合的东西('releasedate')。 –

+0

我对答案进行了编辑,从群组中删除已发布的答案,并将其作为正式答案接受。 – camdixon

0
select T1.city,T2.movietitle,T1.releasedate 
from 
(select city,max(releasedate) as maxreleasedate 
from movies join shownat on shownat.movietitle = movies.title join theatres on theatres.theatrename = shownat.theatrename 
group by city) as T1 
inner join 
(select shownat.movietitle,shownat.city,shownat.releasedate) 
from shownat) as T2 
on T1.city=T2.city and T1.maxreleasedate=T2.releasedate 

这是一种方式,而不是最好的办法。