• MySQL中实现连续日期内数据统计,缺省天数0补全


    某一日,需要查询订单表中一个月每天的金额数

    查询出数据如下:

    array(14) {
      [0] => array(2) {
        ["money"] => string(7) "2000.00"
        ["times"] => string(2) "12"
      }
      [1] => array(2) {
        ["money"] => string(7) "6000.00"
        ["times"] => string(2) "14"
      }
      [2] => array(2) {
        ["money"] => string(8) "31569.00"
        ["times"] => string(2) "15"
      }
      [3] => array(2) {
        ["money"] => string(9) "134596.50"
        ["times"] => string(2) "16"
      }
      [4] => array(2) {
        ["money"] => string(7) "4000.00"
        ["times"] => string(2) "17"
      }
      [5] => array(2) {
        ["money"] => string(8) "20525.00"
        ["times"] => string(2) "18"
      }
      [6] => array(2) {
        ["money"] => string(7) "2000.00"
        ["times"] => string(2) "20"
      }
      [7] => array(2) {
        ["money"] => string(7) "6000.00"
        ["times"] => string(2) "21"
      }
      [8] => array(2) {
        ["money"] => string(7) "9000.00"
        ["times"] => string(2) "22"
      }
      [9] => array(2) {
        ["money"] => string(7) "2000.00"
        ["times"] => string(2) "23"
      }
      [10] => array(2) {
        ["money"] => string(7) "2000.00"
        ["times"] => string(2) "25"
      }
      [11] => array(2) {
        ["money"] => string(7) "7000.00"
        ["times"] => string(2) "26"
      }
      [12] => array(2) {
        ["money"] => string(8) "10000.00"
        ["times"] => string(2) "27"
      }
      [13] => array(2) {
        ["money"] => string(9) "212263.28"
        ["times"] => string(2) "28"
      }
    }

    只查询了14天的数据,而且中间还有几天没有数据,但是我想要没查询的天数显示为0,这个时候就需要先给数据加个起点!如果没有1号,我们就把一号加上,有就略过! 然后还要加个终点,终点应放在原始数组中,不然算法不可能自作主张的添加数据,我这里默认每个月31号,毕竟要做折线统计图,日期是固定的,方法如下:

     1          if ($list[0]['times'] !=1){
     2                 array_unshift($list,array('money' => '0', 'times' =>'01')); //这样就添加了起点
     3             }
     4 
     5             if ($list[count($list)-1]['times'] !=31){
     6                 $list[] = array('money' => '0', 'times' => '31');//这样就添加了终点
     7             }
     8 
     9 
    10             $last = '1';
    11 
    12             foreach($list as $r) {
    13                 while($last && $last < $r['times']) {
    14                     $res[] = array('money' => '0','times' => "$last");
    15 
    16                     $last +=1;
    17                 }
    18                 $res[] = $r;
    19                 $last +=1;
    20             }
    21 
    22 
    23 //            $res就是最终的结果
    24             dump($res);

    结果如下:

    array(31) {
      [0] => array(2) {
        ["money"] => string(1) "0"
        ["times"] => string(2) "01"
      }
      [1] => array(2) {
        ["money"] => string(1) "0"
        ["times"] => string(1) "2"
      }
      [2] => array(2) {
        ["money"] => string(1) "0"
        ["times"] => string(1) "3"
      }
      [3] => array(2) {
        ["money"] => string(1) "0"
        ["times"] => string(1) "4"
      }
      [4] => array(2) {
        ["money"] => string(1) "0"
        ["times"] => string(1) "5"
      }
      [5] => array(2) {
        ["money"] => string(1) "0"
        ["times"] => string(1) "6"
      }
      [6] => array(2) {
        ["money"] => string(1) "0"
        ["times"] => string(1) "7"
      }
      [7] => array(2) {
        ["money"] => string(1) "0"
        ["times"] => string(1) "8"
      }
      [8] => array(2) {
        ["money"] => string(1) "0"
        ["times"] => string(1) "9"
      }
      [9] => array(2) {
        ["money"] => string(1) "0"
        ["times"] => string(2) "10"
      }
      [10] => array(2) {
        ["money"] => string(1) "0"
        ["times"] => string(2) "11"
      }
      [11] => array(2) {
        ["money"] => string(7) "2000.00"
        ["times"] => string(2) "12"
      }
      [12] => array(2) {
        ["money"] => string(1) "0"
        ["times"] => string(2) "13"
      }
      [13] => array(2) {
        ["money"] => string(7) "6000.00"
        ["times"] => string(2) "14"
      }
      [14] => array(2) {
        ["money"] => string(8) "31569.00"
        ["times"] => string(2) "15"
      }
      [15] => array(2) {
        ["money"] => string(9) "134596.50"
        ["times"] => string(2) "16"
      }
      [16] => array(2) {
        ["money"] => string(7) "4000.00"
        ["times"] => string(2) "17"
      }
      [17] => array(2) {
        ["money"] => string(8) "20525.00"
        ["times"] => string(2) "18"
      }
      [18] => array(2) {
        ["money"] => string(1) "0"
        ["times"] => string(2) "19"
      }
      [19] => array(2) {
        ["money"] => string(7) "2000.00"
        ["times"] => string(2) "20"
      }
      [20] => array(2) {
        ["money"] => string(7) "6000.00"
        ["times"] => string(2) "21"
      }
      [21] => array(2) {
        ["money"] => string(7) "9000.00"
        ["times"] => string(2) "22"
      }
      [22] => array(2) {
        ["money"] => string(7) "2000.00"
        ["times"] => string(2) "23"
      }
      [23] => array(2) {
        ["money"] => string(1) "0"
        ["times"] => string(2) "24"
      }
      [24] => array(2) {
        ["money"] => string(7) "2000.00"
        ["times"] => string(2) "25"
      }
      [25] => array(2) {
        ["money"] => string(7) "7000.00"
        ["times"] => string(2) "26"
      }
      [26] => array(2) {
        ["money"] => string(8) "10000.00"
        ["times"] => string(2) "27"
      }
      [27] => array(2) {
        ["money"] => string(9) "212263.28"
        ["times"] => string(2) "28"
      }
      [28] => array(2) {
        ["money"] => string(1) "0"
        ["times"] => string(2) "29"
      }
      [29] => array(2) {
        ["money"] => string(1) "0"
        ["times"] => string(2) "30"
      }
      [30] => array(2) {
        ["money"] => string(1) "0"
        ["times"] => string(2) "31"
      }
    }

    同样的. 12个月也可以这样操作,只要把终点改为12就可以了

    人生得意须尽欢,莫使金樽空对月.
  • 相关阅读:
    聊聊CMDB的前世今生
    我是如何走上运维岗位的?谈谈新人入职运维发展的注意事项
    如何从生命周期的视角看待应用运维体系建设?
    标准化体系建设(下):如何建立基础架构标准化及服务化体系?
    标准化体系建设(上):如何建立应用标准化体系和模型?
    微服务架构时代,运维体系建设为什么要以“应用”为核心?
    Kubernetes容器化工具Kind实践部署Kubernetes v1.18.x 版本, 发布WordPress和MySQL
    Etcd常用运维命令
    Logstash生产环境实践手册(含grok规则示例和ELKF应用场景)
    Netflix业务运维分析和总结
  • 原文地址:https://www.cnblogs.com/luojie-/p/10778889.html
Copyright © 2020-2023  润新知