2016-07-28 121 views
0

我有了如下的表:这个聚合查询是否需要mysql中的子查询?

user_id intsome_dt datetimecount int

这些都不是唯一的钥匙。

我试图获得user_idtimecount值,其中count是最高的。一个简单的查询将类似于以下,以获得最高计数user_id 100 2016年7月18日:

SELECT MAX(count) FROM tbl WHERE user_id = 100 AND DATE(some_dt) = '2016-07-18'

我的问题是,我也想获得some_dt价值MAX(count)来到该行。有没有办法做到这一点没有多个查询?

+0

子查询确实没有列(或列组合)是唯一的? – Strawberry

+0

完全可能的是,列的组合不是唯一的 – randombits

+0

在这种情况下,这个问题可能不可能解决。 – Strawberry

回答

1

可能是你可以使用having子句

SELECT count, some_dt FROM tbl 
WHERE user_id = 100 
AND DATE(some_dt) = '2016-07-18' 
having count = max(count); 

否则,你需要为最大

SELECT count, some_dt FROM tbl 
WHERE user_id = 100 
AND DATE(some_dt) = '2016-07-18' 
and count = select (max(count) FROM tbl 
      WHERE user_id = 100 
      AND DATE(some_dt) = '2016-07-18'); 
+0

您描述的最后一个示例返回匹配WHERE条件的每一行的条目。有没有办法用'max(count)'及其各自的'some_dt'来获取行? – randombits

+0

对不起..missing date()..回答更新 – scaisEdge

+0

是的,那个问题(如第三个例子)是'some_dt'是'datetime'类型,我需要整个'datetime'回来,而不是只是'DATE'表示。子查询选项有效(示例#2),示例#1失败。 – randombits