我有一个包含三列的表tbl:
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
答案 0 :(得分:1)
这是一个聚合查询,但您似乎不希望聚合列。没关系(尽管你无法区分定义每一行的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()
的最大中间大小的限制。此参数可以更改,并且通常足够大,适用于中等大小的表上的此类查询。
答案 1 :(得分:0)
您显然希望每个fk
有一个结果行,因此按其分组。然后,您需要每个fk
的最大ID,行数和最大日期:
select
max(id) as max_id,
count(*) as cnt,
max(date_of) as max_date_of
from tbl
group by fk;