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区和绿色的用户数。我的问题是否回答了你的问题?它符合您的规格说明。