Sql 使用多个HAVING子句从GROUP BY中选择最大计数(我认为)

Sql 使用多个HAVING子句从GROUP BY中选择最大计数(我认为),sql,tsql,group-by,max,having,Sql,Tsql,Group By,Max,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 201

我的桌子:

  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


抓狂时间。

如果是针对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\u Server的吗?用户2不也符合您的标准吗?
user=3
的最新登录名是
2014-01-23
,并且是
红色
。为什么要计算此值?是的,这是针对ms sql server的,用户2确实符合标准,这就是为什么结果中包含id为4的行,我的错误,请修改第7行,以便登录日期在更新后期。谢谢你的关注,太棒了。我知道这是如何工作的,不幸的是,当我在示例数据上运行它时(第7行日期设置为1664),我只收到了2个计数。我做错什么了吗?1664年?那是约会吗?我为我的轻率道歉。从文艺复兴晚期算起一年后,在回答您最初的问题时将其应用于第7行(2013年也可以)。这将留下最新登录日期的行,在区域7中,绿色为4、6和9-总共3个。刚才有人向我指出,第5行也应该是2013年。难怪没有人能回答这个问题。简单地说:获取所有用户的最新登录信息,并返回第7区和绿色的用户数。我的问题是否回答了你的问题?它符合您的规格说明。