【发布时间】:2017-12-19 19:06:36
【问题描述】:
我有一张桌子(你可以在这里看到 http://sqlfiddle.com/#!9/009e8/1),里面有电影,每部电影都有一个类型和上映日期。
CREATE TABLE Movie (
ID int,
Title varchar(255),
Genre varchar(255),
Year int
);
INSERT into Movie VALUES(1, 'Movie 1', 'Horror', 1982);
INSERT into Movie VALUES(1, 'Movie 2', 'Drama', 1983);
INSERT into Movie VALUES(1, 'Movie 3', 'Horror', 1984);
INSERT into Movie VALUES(1, 'Movie 4', 'Comedy', 1985);
INSERT into Movie VALUES(1, 'Movie 5', 'Sci-Fi', 1986);
INSERT into Movie VALUES(1, 'Movie 6', 'Horror', 1987);
INSERT into Movie VALUES(1, 'Movie 7', 'Drama', 2010);
INSERT into Movie VALUES(1, 'Movie 8', 'Horror', 2008);
INSERT into Movie VALUES(1, 'Movie 9', 'Horror', 2006);
INSERT into Movie VALUES(1, 'Movie 10', 'Comedy', 2004);
INSERT into Movie VALUES(1, 'Movie 11', 'Horror', 2003);
INSERT into Movie VALUES(1, 'Movie 12', 'Drama', 2002);
INSERT into Movie VALUES(1, 'Movie 13', 'Comedy', 1999);
INSERT into Movie VALUES(1, 'Movie 14', 'Drama', 1967);
INSERT into Movie VALUES(1, 'Movie 15', 'Sci-Fi', 1982);
INSERT into Movie VALUES(1, 'Movie 16', 'Drama', 2009);
INSERT into Movie VALUES(1, 'Movie 17', 'Sci-Fi', 2008);
我希望能够获取具有特定类型 (SELECT * FROM Movie WHERE Genre in ('Horror', 'Drama')) 的所有电影,但限制结果每个类型按年份排序
所以,如果我有 100 部剧情片、100 部恐怖片和 100 部喜剧片,我只想要两部最古老的剧情片和两部最古老的恐怖片。
如何在 Sql 中做到这一点?如果在标准 SQL 中这是不可能的,我正在使用 Postgres
【问题讨论】:
-
我认为可以使用 cte 和 rownumber 来完成
标签: sql postgresql