【发布时间】:2023-02-07 05:13:21
【问题描述】:
我有一个表 my_table:
case_id first_created last_paid submitted_time
3456 2021-01-27 2021-01-29 2021-01-26 21:34:36.566023+00:00
7891 2021-08-02 2021-09-16 2022-10-26 19:49:14.135585+00:00
1245 2021-09-13 None 2022-10-31 02:03:59.620348+00:00
9073 None None 2021-09-12 10:25:30.845687+00:00
6891 2021-08-03 2021-09-17 None
我创建了 2 个新变量:
select *,
first_created-coalesce(submitted_time::date) as create_duration,
last_paid-coalesce(submitted_time::date) as paid_duration
from my_table;
输出:
case_id first_created last_paid submitted_time create_duration paid_duration
3456 2021-01-27 2021-01-29 2021-01-26 21:34:36.566023+00:00 1 3
7891 2021-08-02 2021-09-16 2022-10-26 19:49:14.135585+00:00 -450 -405
1245 2021-09-13 null 2022-10-31 02:03:59.620348+00:00 -412 null
9073 None None 2021-09-12 10:25:30.845687+00:00 null null
6891 2021-08-03 2021-09-17 null null null
我的问题是如果新变量的值小于 0,我如何用 0 替换它?
理想的输出应该是这样的:
case_id first_created last_paid submitted_time create_duration paid_duration
3456 2021-01-27 2021-01-29 2021-01-26 21:34:36.566023+00:00 1 3
7891 2021-08-02 2021-09-16 2022-10-26 19:49:14.135585+00:00 0 0
1245 2021-09-13 null 2022-10-31 02:03:59.620348+00:00 0 null
9073 None None 2021-09-12 10:25:30.845687+00:00 null null
6891 2021-08-03 2021-09-17 null null null
我的代码:
select *,
first_created-coalesce(submitted_time::date) as create_duration,
last_paid-coalesce(submitted_time::date) as paid_duration,
case
when create_duration < 0 THEN 0
else create_duration
end as QuantityText
from my_table
【问题讨论】:
-
只需在整个表达式上使用
CASE。 -
@PM77-1 你好,非常感谢你的回复,我刚刚用 Case 更新了我的代码,但它仍然不起作用,你能给我更多细节吗,非常感谢!
-
@William 您不能在此级别通过别名引用别名值 - 它们必须更低(在源表、cte、子查询中)。试试
greatest():greatest(first_po_created-coalesce(submitted_timestamp::date),0) as create_duration, greatest(last_po_paid-coalesce(submitted_timestamp::date),0) as paid_duration -
@Zegarek 非常感谢你,它有效,你能把它作为答案发布吗,以便我检查它,谢谢!
标签: postgresql