场景: grafana看板,需要有个下拉菜单,选择相关的日期,自动计算出对应日期的统计数据。
之前用的方法是 select distinct 时间的方式(如下图),这种的不足之处是如果数据量很大,distinct的耗时会变长,有点浪费数据库的性能。
最近在网上看到了直接sql生成日期序列的方法,sql如下:
select DATE_FORMAT(NOW(),'%Y-%m-%d')
UNION ALL
select DATE_FORMAT(SUBDATE(NOW(), interval (timeList.sj*1460) MINUTE),'%Y-%m-%d') as 'datetime' from
(SELECT @num:=@num+1 as sj from
(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10 UNION SELECT 11 UNION SELECT 12 UNION SELECT 13 UNION SELECT 14) t1,
(SELECT @num:=0) y) as timeList ;
对应的grafana看板里面的variables就改成如下:
效果如下: