首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL:选择最小值和最大值,但使用超过2个值的组合

SQL:选择最小值和最大值,但使用超过2个值的组合
EN

Stack Overflow用户
提问于 2013-09-11 17:27:05
回答 1查看 648关注 0票数 0

好的,我正在尝试写一个查询,返回重复发生的事情的最大和最小日期。因此,如果一部电影在1982年、1999年和2001年拍摄了3次,则查询将返回:

代码语言:javascript
复制
Title       : Min  : Max
movietitle1 : 1982 : 2001
movietitle1 : 1982 : 1999
movietitle1 : 1999 : 2001

由于有3种可能的组合,因此有3种结果。如果一部电影只拍了两次,那么它就是第一次约会和最后一次约会。

代码语言:javascript
复制
Title       : Min  : Max
movietitle2 : 1960 : 2006

这是我现在的查询,不幸的是,它只显示了最小和最大值,而忽略了任何可能的第三个值。它也不能使用GROUP BY,因为我没有汇总数据:

代码语言:javascript
复制
SELECT name, MIN(releaseyear), MAX(releaseyear)
FROM movielist
HAVING MAX(releaseyear) != MIN(releaseyear)
EN

回答 1

Stack Overflow用户

发布于 2013-09-11 17:41:40

假设你在一个名为movielist的表中有数据,数据是这样的:

代码语言:javascript
复制
Title       Date
movie1      1982
movie1      1999
movie1      2001

您可以尝试如下所示:

代码语言:javascript
复制
Select m1.title, m1.date min, m2.date max
From movielist m1
inner join movielist m2
on m1.title = m2.title and m1.date < m2.date

我在本地MySQL测试数据库上测试了以下内容:

代码语言:javascript
复制
create table movielist (TITLE VARCHAR(50), MOVIEDATE DATE )

insert into movielist values ('movie1', '2005-01-01');
insert into movielist values ('movie1', '2007-01-01');
insert into movielist values ('movie1', '2010-01-01');

insert into movielist values ('movie2', '2001-01-01');
insert into movielist values ('movie2', '2002-01-01');

insert into movielist values ('movie3', '2003-01-01');


Select m1.title, m1.moviedate min, m2.moviedate max
From movielist m1
inner join movielist m2
on m1.title = m2.title and m1.moviedate < m2.moviedate

我得到了以下结果,我相信这就是你想要的(我使用了日期而不是字符串,但理论是相同的):

代码语言:javascript
复制
movie1  2005-01-01  2007-01-01
movie1  2005-01-01  2010-01-01
movie1  2007-01-01  2010-01-01
movie2  2001-01-01  2002-01-01
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18737406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档