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 为每位艺术家返回一行。

于 2012-02-09T22:17:39.163 回答