0

次のような投影があるとします。

Artist         Painting            Year
---------------------------------------
Alfred         Birds               1945
Alfred         Apples&Oranges      1947
Ben            ZealousNeighbours   1912
Calum          Hope Spliced        1760
Calum          Horseplay           1765
Calum          Earth               1780
David          Apples&Oranges      1947

次の最初のリレーションを返すにはどうすればよいですか。

Artist         Painting            Year
---------------------------------------
Alfred         Birds               1945
Ben            ZealousNeighbours   1912
Calum          Hope Spliced        1760
David          Apples&Oranges      1947

つまり、各画家が最初に描いた絵..

ANSI SQL のみ

4

2 に答える 2

1

次のことを試してください。

SELECT
    [Artist],
    [Painting],
    [Year]
FROM
(
    SELECT
        [Artist],
        [Painting],
        [Year],
        ROW_NUMBER() OVER(PARTITION BY [Artist] ORDER BY [Year] ASC) AS [Rank]
    FROM
        [Table]
) AS a
WHERE
    a.[Rank] = 1
于 2012-02-09T22:13:56.957 に答える
0

これは、ANSI-89準拠のSQL方言で機能するはずですが、アーティストが最初の年に複数の絵を描いた場合は機能しません。より細かい粒度が必要な場合は、年だけでなく実際の日時の値を保存することでこれを微調整できます。

SELECT * 
FROM Paintings 
    INNER JOIN
    (SELECT Artist, MIN([Year]) MinYear 
     FROM Paintings 
     GROUP BY Artist) 
    Minimum ON Minimum.MinYear = Paintings.Year AND Minimum.Artist = Paintings.Artist

SQLがANSI-2003に準拠している場合は、上記のdiahoを実行できます。

e:ANSI-89 SQLのみを使用して、アーティストごとに1行のみを返すことを保証する方法はないと思います。

于 2012-02-09T22:17:39.163 に答える