简体   繁体   English

sql-聚合最大功能和分组依据

[英]sql - aggregate max function and group by

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;

Above is my query, and this problem to solve. 上面是我的查询,这个问题要解决。

Find the titles of the newest movies shown in each city. 查找每个城市显示的最新电影的标题。 Display the city name and the newest movie title ordered by city name and movie title. 显示城市名称和最新电影名称(按城市名称和电影名称排序)。

The normalized data has 3 tables called theatres, shownat and movies. 归一化的数据有3个表,分别称为剧院,电影院和电影院。 Yes, I realize the release date could be more efficient on the shownat table, and to me it makes more sense because not always are videos always released in same areas or cities at the same date. 是的,我知道上图所示的发布日期可能会更有效,对我来说更有意义,因为并非总是在同一时间在同一地区或城市发布视频。 However it is my last homework problem that I am stuck on. 但是,这是我坚持的最后一个家庭作业问题。 What is needed is that the city should only have 1 listing. 需要的是该城市应该只有1个列表。 I thought that the group by city would take care of this. 我认为按城市分组将解决这个问题。 For each city I need the title of the movie that has the newest release date in each of the particular cities(4) in the data set. 对于每个城市,我需要数据集中每个特定城市(4)中具有最新发行日期的电影的标题。 I am unsure as to why I am getting duplicates here when I have the group by feature for this and its use to handle the aggregate max function. 我不确定为什么当我具有按此功能的group by功能及其用于处理合计max函数时,为什么在这里得到重复。 The max function should just give me the newest release yes? max函数应该只是给我最新版本?

"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

This would be the query but I'm not quite sure if max function would works with a date variable: 这将是查询,但我不确定max函数是否可以与日期变量一起使用:

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
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

This is one way and isn't best way. 这是一种方法,也不是最佳方法。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM