今天与几周前的聚合功能

时间:2017-09-14 17:58:02

标签: sql database aggregate-functions presto

我正在使用内联过滤器处理以下 presto / sql 查询,以便对当前日期范围与周前数据进行并排比较。

在我的情况下,查询当前日期范围是2017-09-132017-09-14

到目前为止,我能够获得以下结果,但不幸的是,这不是我想要的。

非常感谢任何形式的帮助。

 SELECT
        DATE_TRUNC('day',DATE_PARSE(CAST(sample.datep AS VARCHAR),'%Y%m%d')) AS date,
        CAST(SUM(sample.page_views) FILTER (WHERE sample.datep BETWEEN 20170913 AND 20170914) AS DOUBLE) AS page_views,
        CAST(SUM(sample.page_views) FILTER (WHERE sample.datep BETWEEN 20170906 AND 20170907) AS DOUBLE) AS page_views_weeks_ago 
    FROM
        sample 
    WHERE
        (
            datep BETWEEN 20170906 AND 20170914
        ) 
    GROUP BY
        1 
    ORDER BY
        1 ASC 
    LIMIT 50

实际结果:

+------------+------------+----------------------+
|    date    | page_views | page_views_weeks_ago |
+------------+------------+----------------------+
| 2017-09-06 |          0 |              990,929 |
| 2017-09-07 |          0 |              913,802 |
| 2017-09-08 |          0 |                    0 |
| 2017-09-09 |          0 |                    0 |
| 2017-09-10 |          0 |                    0 |
| 2017-09-11 |          0 |                    0 |
| 2017-09-12 |          0 |                    0 |
| 2017-09-13 |  1,507,715 |                    0 |
| 2017-09-14 |     48,625 |                    0 |
+------------+------------+----------------------+

预期结果:

+------------+------------+----------------------+
|    date    | page_views | page_views_weeks_ago |
+------------+------------+----------------------+
| 2017-09-13 |  1,507,715 |              990,929 |
| 2017-09-14 |     48,625 |              913,802 |
+------------+------------+----------------------+

1 个答案:

答案 0 :(得分:0)

您可以在前一天加入自己的表格。为简洁起见,我假设我们有一个日期字段,以便日期子结构可以轻松完成。

SELECT date,
       SUM(curr.page_views) AS page_views,
       SUM(prev.page_views) AS page_views_weeks_ago 
FROM sample curr
JOIN sample prev ON curr.date - 7 = prev.date
GROUP BY 1 
ORDER BY 1 ASC 
相关问题