在 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多表头” 是怎么解决的
使用 JOOQ 在 PostgreSQL 中以秒为单位查找和求和时间戳之间的差异