如何在postgresql中设置函数别名?

ijxebb2r  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(1)|浏览(143)

我有一张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

但是我需要在新的当前日期每天重新加载列名,我该如何做呢?

inn6fuwd

inn6fuwd1#

  • 发表评论作为解决长度限制和格式限制的答案。*

PL/pgSQL块中的execute format()crosstab都可以实现这一点,但都很难看。您实际上面临着强制结构名称和类型在调用时为已知的限制。当前日期不断变化,需要重新检查,因此您可以说“在调用时间不知道调用时间”。
您还可以考虑在一列中列出日期(今天、昨天、前天),然后将这些日期的max(t.a)

select t.id as date, 
       t.d, 
       max(t.a) 
from t 
where t.d>=(current_date-2) 
group by t.id, 
         t.d;

此外,您正在模拟聚合filter子句,如下所示:

max(case when t.d = current_date - 2 then t.a end)

是一种古老的方法

max(t.a) filter (where t.d=current_date-2)

相关问题