我有一张table
| id|日期|金额|
| - -----|- -----|- -----|
| 1| 2023年03月06日|两万|
| 1| 2023年06月04日|三万|
| 1| 2023年06月05日|四万|
我需要接收下一个格式表:
| 日期|2023年03月06日|2023年06月04日|2023年06月05日|
| - -----|- -----|- -----|- -----|
| 1|两万|三万|四万|
我使用下一个查询:
select t.id as date,
max(case when t.d = current_date - 2 then t.a end) "03.06.2023",
max(case when t.d = current_date - 1 then t.a end) "04.06.2023",
max(case when t.d = current_date then t.a end) "05.06.2023"
from t
group by t.id
但是我需要在新的当前日期每天重新加载列名,我该如何做呢?
1条答案
按热度按时间inn6fuwd1#
PL/pgSQL块中的
execute format()
或crosstab
都可以实现这一点,但都很难看。您实际上面临着强制结构名称和类型在调用时为已知的限制。当前日期不断变化,需要重新检查,因此您可以说“在调用时间不知道调用时间”。您还可以考虑在一列中列出日期(今天、昨天、前天),然后将这些日期的
max(t.a)
此外,您正在模拟聚合
filter
子句,如下所示:是一种古老的方法