当统计多条的三个参数在不同时间段的数据的sum,又只能写在同一个sql上时,可以考虑union all三次查询,

select * from
(
select kk.a_time as dates,kk.flag ,sum(kk.`参数一`) 参数一之和
,sum(kk.`参数二`) 参数二之和
,sum(kk.`参数三`) 参数三之和
from
(select
k.a_time
,k.flag
,sum(case when p_time=0 or p_time= a_time then 1 else 0 end) as '参数一'
,'' as '参数二'
,'' as '参数三'
from
(
select
a.pay_id
,o_days
,FROM_UNIXTIME(a_time/1000,'%Y-%m-%d')a_time
,case when p_time<>0 then FROM_UNIXTIME(p_time/1000,'%Y-%m-%d') else 0 end as p_time
,case when mod(a.pay_id,2)=0 and l.pay_id is not null then '系统一' else '系统二' end as flag
from pay a
LEFT JOIN
log l on a.pay_id = l.pay_id and l.`status` = 1 and type = 'baseinfo'
where a_time>= UNIX_TIMESTAMP('2018-07-23')*1000 and a_time< UNIX_TIMESTAMP(DATE_ADD(CURDATE(),INTERVAL 1 DAY))*1000 +24*3600*1000
)k
GROUP BY 1,2 UNION all select
DATE_SUB(k.a_time,INTERVAL 1 day) a_time
,k.flag
,'' as '参数一'
,'' as '参数二'
,sum(case when p_time=0 or p_time = DATE_SUB(a_time,INTERVAL 1 DAY) or p_time= a_time then 1 else 0 end) as '参数三' from
(
select
a.pay_id
,o_days
,FROM_UNIXTIME(a_time/1000,'%Y-%m-%d')a_time
,case when p_time<>0 then FROM_UNIXTIME(p_time/1000,'%Y-%m-%d') else 0 end as p_time
,case when mod(a.pay_id,2)=0 and l.pay_id is not null then '系统一' else '系统二' end as flag
from pay a
LEFT JOIN
log l on a.pay_id = l.pay_id and l.`status` = 1 and type = 'baseinfo'
where a_time>= UNIX_TIMESTAMP('2018-07-24')*1000 and a_time< UNIX_TIMESTAMP(DATE_ADD(CURDATE(),INTERVAL 1 DAY))*1000 +24*3600*1000
)k
GROUP BY 1,2 union all select
DATE_SUB(k.a_time,INTERVAL 1 day) a_time
,k.flag
,'' as '参数一'
,sum(case when o_days>0 then 1 else 0 end) as '参数二'
,'' as '参数三'
from
(
select
a.pay_id
,o_days
,FROM_UNIXTIME(a_time/1000,'%Y-%m-%d')a_time
,case when p_time<>0 then FROM_UNIXTIME(p_time/1000,'%Y-%m-%d') else 0 end as p_time
,case when mod(a.pay_id,2)=0 and l.pay_id is not null then '系统一' else '系统二' end as flag
from pay a
LEFT JOIN
log l on a.pay_id = l.pay_id and l.`status` = 1 and type = 'baseinfo'
where a_time>= UNIX_TIMESTAMP('2018-07-24')*1000 and a_time< UNIX_TIMESTAMP(DATE_ADD(CURDATE(),INTERVAL 1 DAY))*1000 +24*3600*1000
)k
GROUP BY 1,2 )kk
GROUP BY 1,2) kk
-- where dates>={DATE1} and dates<={DATE2}

  

该语句用了三次统计分别统计 参数一,参数二,参数三 的对应记录的dates,再做合并,有点好性能,只为满足需求的无奈之举!

最新文章

  1. 开篇:IT软件人员学习的书籍 - IT软件人员书籍系列文章
  2. ExtJS入门教程03,form中怎能没有validation
  3. linux工具之putty
  4. java UncaughtExceptionHandler 处理线程意外中止
  5. 【Hadoop代码笔记】Hadoop作业提交之TaskTracker获取Task
  6. java中的TreeMap如何顺序按照插入顺序排序
  7. js通过keyCode值判断单击键盘上某个键,然后触发指定的事件
  8. 利用jquery encoder解决XSS脚本注入所产生的问题
  9. Windows 10 2016 LTS版本下载与激活
  10. HashMap实现原理(jdk1.7/jdk1.8)
  11. golang学习笔记 ---命令行参数
  12. PNG怎么转换成32位的BMP保持透明
  13. 在VMware中为CentOS配置静态ip并可访问网络
  14. e740. 向标签中加入一个图标
  15. 《剑指offer》— JavaScript(20)包含min函数的栈
  16. Python基础之软件目录结构规范
  17. Android绘图机制和处理技巧
  18. Objective-C 类和对象
  19. 关于xargs cp中,如何确定拷贝的源和目的
  20. Apache apxs命令

热门文章

  1. 两个IP实现IIS和Apache公用80端口的设置方法
  2. JAVA加解密 -- 消息摘要算法
  3. perl学习笔记——文件测试
  4. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-人机界面如何修改界面皮肤
  5. 【BIEE】13_BIEE组件介绍(补充)
  6. Srping AOP xml方式
  7. ios 调试过程捕获异常Stack 信息
  8. Android中Scrollview、ViewPager冲突问题汇总(已解决)
  9. Mac 上的终端神器 iTerm2
  10. webpack 打包压缩 ES6文件报错UglifyJs + Unexpected token punc ((); 或者 Unexpected token: operator (&gt;)