mysql - 在Mysql中选择非按列计数的分组

标签 mysql

我有一个包含三列的表格:

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/

相关文章:

javascript - 使用PHP switch控制语句列出MySQL数据库中的每个表列和行

MySQL 查询不返回 DISTINCT 或 TIMESTAMPDIFF

mysql - SQL 检查时间之间是否可用

mysql - Symfony2、Doctrine2、MySql 和 auto_increment 列问题

php - 在 laravel 查询中选择 mysql 期间添加自定义字段

mysql - 需要 mysql 查询帮助

多列上的MySQL主键

MySQL:计算分组的项目?

mysql - 如何计算行数并相应地使用分组依据?

mysql - MySQL 在引用 VARCHAR 上的索引前缀时如何使用 ORDER BY?