2

これは私の研究のためなので、回答ではなくヒントをいただければ幸いですが、どちらでもかまいません。:)

次のリンクは、SQLFiddle の私のデータです: http://sqlfiddle.com/#!2/d7373

CREATE TABLE Movies
    (`MovieID` int, `Title` varchar(6), `YearReleased` int)
;

INSERT INTO Movies
    (`MovieID`, `Title`, `YearReleased`)
VALUES
    (1002, 'movie1', 2001),
    (1003, 'movie2', 1951),
    (1004, 'movie3', 2001),
    (1005, 'movie4', 2004),
    (1006, 'movie2', 2007),
    (1007, 'movie5', 2005),
    (1008, 'movie2', 2010),
    (1009, 'movie3', 2006),
    (1010, 'movie6', 2003),
    (1011, 'movie7', 2002),
    (1012, 'movie8', 2004),
    (1013, 'movie9', 2002)
;

私がやりたいのは、複数回公開された映画の名前と公開年を出力することです。SQL Fiddle を見ると 'movie3' が 2 回リリースされているので、その名前とリリースされた両方の年を出力したいと思います。映画が 3 回公開された場合、公開日が 3 組あるため、3 回表示する必要があります。以下は、SQL Fiddle のデータを出力する方法の例です。

Movie   | FirstRelease | SecondReleased
---------------------------------------
movie2  |    1951      |      2007
movie2  |    1951      |      2010
movie2  |    2007      |      2010
movie3  |    2001      |      2007

みんなありがとう。

4

2 に答える 2

1

リリース日のすべてのペアが必要な場合は、単純な自己結合 ( fiddle )を実行できます。

SELECT m1.Title AS Movie, m1.YearReleased AS FirstRelease,
    m2.YearReleased AS SecondReleased
FROM Movies m1
INNER JOIN Movies m2 ON m2.Title = m1.Title 
    AND m2.YearReleased > m1.YearReleased        

これにより、Movies の行が、タイトルが同じでリリース年が大きい行と関連付けられ、すべてのペアが得られます。


編集前の質問に従って、リリース日とMINのリリース年のみが必要な場合は、 ( fiddle )を使用して自己結合を行うことができます。

SELECT m1.Title AS Movie, m1.YearReleased AS FirstRelease,
    MIN(m2.YearReleased) AS SecondReleased
FROM Movies m1
INNER JOIN Movies m2 ON m2.Title = m1.Title 
    AND m2.YearReleased > m1.YearReleased        
GROUP BY m1.Title, m1.YearReleased

これが行うことは、各映画と各リリースMIN年に対して、同じ映画の imum (次の) リリース年を取得することです。は、次のINNER JOINリリースがある行のみを返すようにします。

これは、多くのリリースがある映画ごとに複数の行を返すという点で、質問の要求に従うことに注意してください (例: movie2)。列名「FirstRelease」と「SecondReleased」は少し誤称です。

率直に答えて申し訳ありませんが、クエリは千の言葉を話していると思います。

于 2013-08-15T03:30:49.033 に答える