【问题标题】:Date based sql aggregation基于日期的 sql 聚合
【发布时间】:2017-06-09 06:08:17
【问题描述】:

我有一组列 F_no、F_date 和 F_weight。现在对于每个 F_date 和 F_no 我都有 sum(F_weight)。这很容易。

我现在要做的是,对于每个 F_date 和 F_no,我想在 (F_date-1) 和 (F_date-2) 的 F_weight 上进行聚合。 表结构如下所示:

| F_no | F_日期 |总和(F_date)| (F_date-1) |总和(F_date-1)| (F_date-2) |总和(F_date-2)|

谁能帮我解决这个问题? 谢谢你

【问题讨论】:

标签: mysql sql group-by aggregate vertica


【解决方案1】:

这就是你的意思吗? (我同意,你本可以更清楚地表达你的问题,但有时我们的任务似乎也是,理解神秘的问题......)

WITH
input(f_no,f_date,f_weight) AS (
          SELECT 42,'2017-01-01',30
UNION ALL SELECT 42,'2017-01-01',30
UNION ALL SELECT 42,'2017-01-02',25
UNION ALL SELECT 42,'2017-01-02',25
UNION ALL SELECT 42,'2017-01-03',20
UNION ALL SELECT 42,'2017-01-03',20
UNION ALL SELECT 42,'2017-01-04',15
UNION ALL SELECT 42,'2017-01-04',15
UNION ALL SELECT 42,'2017-01-05',10
UNION ALL SELECT 42,'2017-01-05',10
UNION ALL SELECT 42,'2017-01-06', 5
UNION ALL SELECT 42,'2017-01-06', 5
)
,
as_vertical AS (
  SELECT DISTINCT
    f_no
  , f_date
  , SUM(f_weight) OVER(PARTITION BY f_no,f_date) AS weight_sum
  FROM input
)
-- now as pivot ...
SELECT
  f_no
, f_date
    , weight_sum
, LAG(f_date    ,1) OVER(PARTITION BY f_no ORDER BY f_date) AS f_date_1
, LAG(weight_sum,1) OVER(PARTITION BY f_no ORDER BY f_date) AS weight_sum_1
, LAG(f_date    ,2) OVER(PARTITION BY f_no ORDER BY f_date) AS f_date_2
, LAG(weight_sum,2) OVER(PARTITION BY f_no ORDER BY f_date) AS weight_sum_2
FROM as_vertical;

f_no|f_date    |weight_sum|f_date_1  |weight_sum_1|f_date_2  |weight_sum_2
  42|2017-01-01|        60|(null)    |(null)      |(null)    |(null)
  42|2017-01-02|        50|2017-01-01|          60|(null)    |(null)
  42|2017-01-03|        40|2017-01-02|          50|2017-01-01|          60
  42|2017-01-04|        30|2017-01-03|          40|2017-01-02|          50
  42|2017-01-05|        20|2017-01-04|          30|2017-01-03|          40
  42|2017-01-06|        10|2017-01-05|          20|2017-01-04|          30

我应该补充一点:您可以在 Vertica 中执行此操作,因为它支持 OLAP 函数(LAG()SUM() OVER())。 MySql 没有,恐怕...

【讨论】:

    猜你喜欢
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 2018-09-02
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    相关资源
    最近更新 更多