我有一个包含三列的表格:
id | fk | dateof
1 | 1 | 2016-01-01
2 | 1 | 2016-01-02
3 | 2 | 2016-02-01
4 | 2 | 2016-03-01
5 | 3 | 2016-04-01
我想要得到这样的结果
Id count of Id max(dateof)
2 | 2 | 2016-01-02
4 | 2 | 2016-03-01
5 | 1 | 2016-04-01
我的尝试
SELECT id,tbl.dateof dateof
FROM tbl
INNER JOIN
(SELECT fk, MAX(dateof) dateof ,
count(id) cnt_of_id -- How to get this count value in the result
FROM tbl
GROUP BY fk) temp
ON tbl.fk = temp.fk AND tbl.dateof = temp.dateof
最佳答案
这是一个聚合查询,但您似乎不希望对该列进行聚合。没关系(尽管你无法区分定义每一行的 rk):
select count(*) as CountOfId, max(dateof) as maxdateof
from t
group by fk;
换句话说,您的子查询几乎就是您所需要的。
如果您有合理数量的数据,则可以使用 MySQL 技巧:
select substring_index(group_concat(id order by dateof desc), ',', 1) as id
count(*) as CountOfId, max(dateof) as maxdateof
from t
group by fk;
注意:这受到 group_concat()
的最大中间大小的限制。该参数可以更改,并且通常对于中等大小的表上的此类查询来说足够大。
关于mysql - 在Mysql中选择非按列计数的分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36375983/