2010-01-29 19 views
0

我有以下幾點:SQL查詢隨着GroupBys - 不可能查詢

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

我要使出渾身的名字和年齡wherer的日期> = 01-JAN-11

我已經試過

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

這並不工作 - 我得到了2011年1月01和2012年1月1日對保羅這是錯誤的 - 我只是想在一個

注:此評論是迄今爲止最正確的,但並沒有提供答案:(

你的where子句將獲得2個記錄,將讓他們爲2分的記錄,因爲你的名字和年齡分組。如果姓名和年齡是相同的,這會是1點的記錄,而不是2

+1

「那不工作」 是不是非常翔實。你能解釋發生了什麼嗎?另外,我看不到C#在這個問題中的位置。 – 2010-01-29 16:00:03

+0

請發佈您想要的結果集。 – Quassnoi 2010-01-29 16:00:05

+0

[WHEN]上的數據類型是什麼?你實際上是使用聚合還是隻是你想要的一個想法?這個問題聽起來像你只想要名稱/年齡。 – 2010-01-29 16:02:24

回答

1

WHEN是SQL Server保留字 - 如果這真的是你的列名,它可能會導致你的問題。在任何情況下,發佈更多信息都很有幫助,例如您收到的任何錯誤。

而且什麼它的價值,通常我會用DATEDIFF的日期比較:

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

+1對於文字日期也使用安全的日期格式。 – womp 2010-01-29 16:09:12

+0

不 - 什麼時候是一個虛擬的列名 - 它不是真正的那個 – 2010-01-29 16:11:51

+0

好,我想是的,但只是想指出:) – 2010-01-29 17:11:48

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 
0

這就是容易...

SELECT NAME, AGE, MIN(When) 
FROM ATABLE 
WHERE 
    YEAR([When]) >= 2011 
    AND MONTH([When]) >= 1 
    AND DAY([When]) >= 1 
GROUP BY NAME, AGE 
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