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

时间:2013-09-11 09:27:05

标签: sql max min

好的,所以我正在尝试编写一个返回已经重复的事物的日期的最大值和最小值的查询。因此,如果在1982年,1999年和2001年期间制作了3次特定电影,则查询将返回:

Title       : Min  : Max
movietitle1 : 1982 : 2001
movietitle1 : 1982 : 1999
movietitle1 : 1999 : 2001

由于有3种可能的组合,因此有3种结果。如果一部电影只制作了两次,那么就只显示第一个日期和最后一个日期。

Title       : Min  : Max
movietitle2 : 1960 : 2006

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

SELECT name, MIN(releaseyear), MAX(releaseyear)
FROM movielist
HAVING MAX(releaseyear) != MIN(releaseyear)

1 个答案:

答案 0 :(得分:2)

假设您在名为movielist的表中有数据,并且数据类似于:

Title       Date
movie1      1982
movie1      1999
movie1      2001

您可以尝试以下方式:

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测试数据库上测试了以下内容:

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

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

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