在 PostgreSQL 中以一行显示今年和去年的数据

Posted

技术标签:

【中文标题】在 PostgreSQL 中以一行显示今年和去年的数据【英文标题】:Showing this year and last year's data in one row in PostgreSQL 【发布时间】:2019-08-16 16:37:30 【问题描述】:

我有一张按周分组的销售表。我想编写一个查询,创建一个新表,给出相关一周的销售额以及去年这个时候该项目的销售额,但我的尝试要么给出去年这个时间的空白单元格(TTLY)值或重复项。

我已经尝试编写一个子查询,它获取日期,减去 52 周,并显示该周的值,然后将该子查询加入到我的主查询中。

但是,该子查询不起作用:查询正确显示了一年前的日期,但随后不会提取该 TTLY 周的 SALES,仅提取当前周。


with ttyl as 
(select
    date::date as date,
    (sales.date - interval '52 weeks') as date_ttly,
    ID,
    value
    from sales
    where country = 'uk' and date > '2019-08-01' and ID = '12345678')

在此示例中,子查询在 date_ttly 列中生成上一年的日期,但在 value 列中提取 2019 年的数据。

所有的 WHERE 条件都是临时的,以便更容易构建查询。

谢谢!

【问题讨论】:

您可以发布示例数据和预期结果吗? 抱歉,我正在使用手机,但单个表包含 ID、销售、日期等列。我想要一个包含 ID、销售额、日期、去年日期和去年销售额的表格。 【参考方案1】:

假设销售额按date仅按country 分组,同一张表上的联接应该可以工作:

SELECT sales1.id,
    sales1.date,
    sales1.value,
    sales2.date,
    sales2.value
FROM sales AS sales1
JOIN sales AS sales2 ON sales1.date - interval '52 weeks' = sales2.date
                    AND sales1.country = sales2.country

但是,这也假设您的 date 始终是一周中的同一天,例如星期一。

【讨论】:

它始终是一周中的同一天(星期六)。销售额按 ID、日期和国家/地区分组? 成功了!!我还必须按 ID 分组 :) 谢谢!

以上是关于在 PostgreSQL 中以一行显示今年和去年的数据的主要内容,如果未能解决你的问题,请参考以下文章

你好,去年你提问的 “如何实现ABAP ALV多表头” 是怎么解决的

sql server 中取出今年和去年每个月的数据

使用 JOOQ 在 PostgreSQL 中以秒为单位查找和求和时间戳之间的差异

将查询结果存储在变量中以在 Postgresql 中的另一个查询中使用

360报告显示:网友对摄像头的关注较去年提升201.5%

sql 今年和去年的SQL YTD。此查询可确保去年的值仅上升到当天的整个年份