2014-02-07 70 views
0

我的表:MAX從GROUP BY的SELECT COUNT多HAVING子句(我認爲)

id user area login   colour 
    ------------------------------------------ 
    1  2  7  2014-01-05  red 
    2  1  7  2014-01-03  green 
    3  3  7  2014-01-08  red 
    4  2  7  2014-01-22  green 
    5  3  7  2014-01-15  amber 
    6  1  7  2014-01-12  green 
    7  3  7  2014-01-23  red 
    8  4  7  2014-01-05  red 
    9  3  7  2014-01-12  green 
10  4  7  2014-01-28  amber 
11  1  4  2014-01-06  amber 

只從每個用戶上一次登錄的列表(即MAX(登錄)) 我需要的計數從綠色區域7登錄的那些

從給定的表格中,ids 4,6和9具有區域7的最新登錄日期和綠色,因此我希望我的查詢返回它們的計數,它是3.

發癢的頭時間。

+0

這是對SQL_SERVER測試? –

+0

用戶2是否也符合您的標準? –

+0

'user = 3'的最新登錄信息是'2014-01-23',並且是'red'。爲什麼這應該算呢? –

回答

0

如果它是SQL-Server,您可以使用windows聚合函數:

; WITH cte AS 
    (SELECT login, area, colour, 
      maxlogin = MAX(login) OVER (PARTITION BY [user]) 
    FROM dbo.logins 
) 
SELECT COUNT(*) AS cnt 
FROM cte 
WHERE maxlogin = login 
    AND area = 7 
    AND colour = 'green' ; 

SQL-Fiddle

+0

太棒了。我看到這是如何工作的,不幸的是,當我在示例數據上運行它時(第7行的日期設置爲1664),我收到的計數僅爲2. 我做錯了什麼? – sanepete

+0

1664?那是約會嗎? –

+0

我爲我的輕浮感到抱歉。對於您的第一個問題,2013年的文藝復興已經過去了一年,可以應用到第7行。 然後這會留下最後登錄日期的行,在區域7中,綠色爲4,6和9,總共爲3。 – sanepete