【问题标题】:How to pivot in mysql for previous date in mysql如何在 mysql 中旋转 mysql 中的上一个日期
【发布时间】:2020-05-02 12:23:38
【问题描述】:

表结构和数据存在于https://www.db-fiddle.com/f/5rKXiavsoMeQazSHwxaTVK/0

我正在尝试获取所有先前日期范围的百分比。

circle_name`|current_capacity|2020-03-16|2020-03-17|2020-03-18|

其中当前容量是最大日期容量和每个日期在行中的百分比。

最后的结果就像https://www.db-fiddle.com/f/wTFejVRzQBTXZkfWjBuqq8/0

select circle_name,Subscriber as current_capacity,
Subscriber/Subs_Capacity * 100 as percentage,
DATE_FORMAT(date,'%y-%m-%d') as date
from circle 
where date BETWEEN date_add('2020-03-18',interval -3 day) 
and '2020-03-18'

请在此处帮助在 mysql 中进行枢轴。

【问题讨论】:

    标签: mysql sql date group-by sum


    【解决方案1】:

    这是一种使用条件聚合的方法。这不是将实际日期分配给列名(这需要动态 SQL),而是通过设置一个变量来表示您希望计算开始的日期,然后生成名为 d_2 的列(对于 day - 2)、d_1d_0

    set @mydate = '2020-03-18';
    select 
        circle_name,
        max(case when date = @mydate then subscriber end) current_capacity,
        100 * sum(case when date = @mydate - interval 2 day then subscriber end)
            / sum(case when date = @mydate - interval 2 day then subs_capacity end) d_2,
        100 * sum(case when date = @mydate - interval 1 day then subscriber end)
            / sum(case when date = @mydate - interval 1 day then subs_capacity end) d_1,
        100 * sum(case when date = @mydate                  then subscriber end)
            / sum(case when date = @mydate                  then subs_capacity end) d_0
    from circle
    group by circle_name;
    

    your db fiddle 中,查询产生:

    | circle_name | current_capacity | d_2     | d_1     | d_0     |
    | ----------- | ---------------- | ------- | ------- | ------- |
    | AP          | 758415           | 90.8422 | 91.1373 | 91.3753 |
    | AS          | 764976           | 83.461  | 83.2508 | 82.7001 |
    | BH          | 807447           | 84.5168 | 86.2083 | 85.8986 |
    | CH          | 785384           | 87.4384 | 87.2934 | 87.2649 |
    | DL          | 859161           | 85.9683 | 85.5766 | 85.9161 |
    | GJ          | 882817           | 85.6419 | 85.7533 | 86.1285 |
    | HP          | 203300           | 80.9292 | 80.9608 | 81.32   |
    | HR          | 255511           | 84.9163 | 85.1213 | 85.1703 |
    | JK          | 592271           | 84.244  | 84.2937 | 84.6101 |
    | KK          | 729628           | 88.0607 | 88.1499 | 87.907  |
    | KL          | 793872           | 80.0359 | 79.5544 | 79.3872 |
    | KO          | 847638           | 84.6341 | 84.6501 | 84.7638 |
    | MB          | 687501           | 87.8208 | 85.9449 | 85.9376 |
    | MH          | 886554           | 95.8487 | 95.6997 | 88.6554 |
    | MP          | 821474           | 83.1335 | 83.3047 | 83.8239 |
    | NE          | 824807           | 87.5708 | 87.5969 | 86.8218 |
    | OR          | 710822           | 84.5128 | 85.2319 | 83.6261 |
    | PB          | 194300           | 88.798  | 96.5235 | 97.15   |
    | RJ          | 840310           | 82.438  | 83.7309 | 84.031  |
    | TN          | 725307           | 90.8855 | 90.7334 | 90.6634 |
    | UE          | 903366           | 89.8577 | 90.0483 | 90.3366 |
    | UW          | 729154           | 98.9529 | 87.1339 | 87.8499 |
    | WB          | 0                | 0       | 0       | 0       |
    

    【讨论】:

      猜你喜欢
      • 2019-11-08
      • 2015-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多