我有以下内容:
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条。
答案 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)
试
SELECT NAME, AGE, MIN(When) FROM A TABLE WHERE When >= '2011/01/01' GROUP BY NAME, AG
答案 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