2017-12-19 12 views
0

私は映画(ここではhttp://sqlfiddle.com/#!9/009e8/1で見ることができます)を持っており、各ムービーにはジャンルとリリース日があります。グループごとのSQLのグループ化と制限の結果

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

私は100本のドラマの映画を持っている場合、私は100本のホラー映画、特定のジャンル(SELECT * FROM Movie WHERE Genre in ('Horror', 'Drama'))ですべてのムービーを取得することができるが、だから、今年

が注文したジャンルあたりの結果を制限したいですそして100コメディ、私は2つの最も古いドラマと2つの最も古いホラー映画がほしいです。

Sqlでこれを行う方法?標準SQLにはそれができない場合、私はPostgresのに

+0

私はそれがcteとrownumberを使って行うことができると思います –

答えて

1
SELECT 
    * 
FROM (SELECT 
    id, 
    title, 
    genre, 
    year, 
    DENSE_RANK() OVER (PARTITION BY genre ORDER BY year) AS year_calc 
FROM Movie 
WHERE Genre IN ('Horror', 'Drama')) a 
WHERE year_calc IN (1, 2); 

Saravanan

0

を使用してい@Arijitムカジーは、あなたがCTEROW_NUMBER()

;WITH CTE AS (
    SELECT *, seq = ROW_NUMBER() OVER (PARTITION BY Genre ORDER BY Year ASC) 
    FROM Movie 
    WHERE Genre in ('Horror', 'Drama') 
) 
SELECT * FROM CTE WHERE seq <= 2 
0
SELECT rank_filter.* FROM (
    SELECT Movie.*, 
    rank() OVER (
     PARTITION BY Genre 
     ORDER BY Year 
    ) 
    FROM Movie 
) rank_filter WHERE RANK IN (1,2) 

http://sqlfiddle.com/#!17/009e8/13

を使用することができます示唆したように
関連する問題