使用GroupBys进行SQL查询 - 不可能的查询

时间:2010-01-29 15:57:39

标签: sql

我有以下内容:

Name    Age When
Paul    21  01-Jan-10
Paul    54  01-Jan-11
Paul    65  01-Jan-12

我想提取所有姓名和年龄,日期为> = 01-Jan-11

我试过了

SELECT NAME, AGE, MIN(When)
FROM ATABLE
WHERE When >= '01-Jan-11'
GROUP BY NAME, AGE

那不起作用 - 我得到2011年1月1日和2012年1月1日的保罗这是错的 - 我只想要一个

注意:到目前为止,此评论是最正确的,但没有提供答案:(

你是where子句将获得2条记录,并将它们保存为2条记录,因为你按名称和年龄进行分组。如果姓名和年龄相同,则为1条记录,而不是2条。

5 个答案:

答案 0 :(得分:1)

WHEN是SQL Server保留字 - 如果这确实是您的列名,则可能会导致您出现问题。在任何情况下,发布更多信息会很有帮助,例如您收到的任何错误。

另外,对于它的价值,通常我会使用DATEDIFF进行日期比较:

  SELECT NAME, AGE, MIN(When)
    FROM ATABLE
   WHERE DATEDIFF ( 'd', '2001-01-01', When ) > 0
GROUP BY NAME, AGE

答案 1 :(得分:0)

答案 2 :(得分:0)

SQL Server

SELECT  a.*
FROM    (
        SELECT  DISTINCT name
        FROM    atable
        ) ad
CROSS APPLY
        (
        SELECT  TOP 1 *
        FROM    atable ai
        WHERE   ai.name = ad.name
                AND When >= '01-Jan-11'
        ORDER BY
                When
        ) a

答案 3 :(得分:0)

很容易......

SELECT NAME, AGE, MIN(When)
FROM ATABLE
WHERE 
    YEAR([When]) >= 2011
    AND MONTH([When]) >= 1
    AND DAY([When]) >= 1
GROUP BY NAME, AGE

答案 4 :(得分:0)

SELECT  k.Name, t.Age, k.MinWhen
FROM    (
        SELECT  Name, MIN(When) MinWhen
        FROM    ATABLE
        GROUP BY Name
        ) k
        JOIN ATABLE t ON
            t.Name = k.Name
        AND t.When = k.MinWhen