Mysql 按年度波段间隔分组行
我有一个表(tbl_people),在这个表中我有一个datetime字段,我想分组,并以10年为一组计算记录。。。结果应该是这样的:Mysql 按年度波段间隔分组行,mysql,group-by,Mysql,Group By,我有一个表(tbl_people),在这个表中我有一个datetime字段,我想分组,并以10年为一组计算记录。。。结果应该是这样的: |计数|年| |1000 | 1980-1989 | |250 | 1990-1999 | 我可以编写多个查询来完成它,但这意味着我必须为每个范围编写不同的查询。是否有一种方法可以从最短的一年(10年间隔)开始动态递增,并计算间隔内的记录数?这应该可以工作(感谢Olaf Dietsche向我展示了这个奇妙的网站的存在): select CONCAT(FLOO
|计数|年|
|1000 | 1980-1989 |
|250 | 1990-1999 |
我可以编写多个查询来完成它,但这意味着我必须为每个范围编写不同的查询。是否有一种方法可以从最短的一年(10年间隔)开始动态递增,并计算间隔内的记录数?这应该可以工作(感谢Olaf Dietsche向我展示了这个奇妙的网站的存在):
select CONCAT(FLOOR(YEAR(from_unixtime(TIMESTAMP))/10)*10,'-',(FLOOR(YEAR(from_unixtime(TIMESTAMP))/10)*10)+9) as year , count(ID) from
TABLE group by FLOOR(YEAR(from_unixtime(TIMESTAMP))/10)*10;
如果数字是1992,
FLOOR(1992/10)
将给出199
,带有10
的时间将给出1990
。关于CEIL(1992/10)=200
和时间10
=2000
,减去1
,得到1999
,所以年应该是1990-1999
首先计算每行的十年
select floor(year(`year`) / 10) * 10 as decade
from tbl_people
select CONCAT(FLOOR(YEAR(from_unixtime(TIMESTAMP))/10)*10,'-',(FLOOR(YEAR(from_unixtime(TIMESTAMP))/10)*10)+9) as year , count(ID) from
TABLE group by FLOOR(YEAR(from_unixtime(TIMESTAMP))/10)*10;
然后用这个中间结果进行计数
select CONCAT(FLOOR(YEAR(from_unixtime(TIMESTAMP))/10)*10,'-',(FLOOR(YEAR(from_unixtime(TIMESTAMP))/10)*10)+9) as year , count(ID) from
TABLE group by FLOOR(YEAR(from_unixtime(TIMESTAMP))/10)*10;
或者这个,如果你想把十年放在一列的话
select count(*) as count, concat(decade, '-', decade + 9) as year
from (select floor(year(`year`) / 10) * 10 as decade
from tbl_people) t
group by decade
select CONCAT(FLOOR(YEAR(from_unixtime(TIMESTAMP))/10)*10,'-',(FLOOR(YEAR(from_unixtime(TIMESTAMP))/10)*10)+9) as year , count(ID) from
TABLE group by FLOOR(YEAR(from_unixtime(TIMESTAMP))/10)*10;
这会有帮助
select CONCAT(FLOOR(YEAR(from_unixtime(TIMESTAMP))/10)*10,'-',(FLOOR(YEAR(from_unixtime(TIMESTAMP))/10)*10)+9) as year , count(ID) from
TABLE group by FLOOR(YEAR(from_unixtime(TIMESTAMP))/10)*10;
我需要从表中选择最小年份。然后在此基础上创建乐队。奥拉夫的答案就是这样。