【发布时间】:2021-10-29 23:46:54
【问题描述】:
我在 Redshift/PostgreSQL 中有一张报告交易的表格,我不时上传包含发票及其到期和付款日期的报告,如下所示:
| invoice_Id | report_date | due_date | paid_date |
|---|---|---|---|
| A1 | 08-26-2021 | 09-02-2021 | 08-25-2021 |
| A2 | 08-26-2021 | 08-29-2021 | |
| A3 | 08-26-2021 | 09-05-2021 | |
| A4 | 08-26-2021 | 08-30-2021 | |
| A1 | 08-28-2021 | 09-02-2021 | 08-25-2021 |
| A2 | 08-28-2021 | 08-29-2021 | |
| A3 | 08-28-2021 | 09-05-2021 | 08-27-2021 |
| A4 | 08-28-2021 | 08-30-2021 | |
| A1 | 08-30-2021 | 09-02-2021 | 08-25-2021 |
| A2 | 08-30-2021 | 08-29-2021 | |
| A3 | 08-30-2021 | 09-05-2021 | 08-27-2021 |
| A4 | 08-30-2021 | 08-30-2021 |
我需要根据paid_date、due_date 和 (这是棘手的部分)report_date 或 TODAY,当报告是每张发票的最后一张时。
| invoice_Id | report_date | due_date | paid_date | status |
|---|---|---|---|---|
| A1 | 08-26-2021 | 09-02-2021 | 08-25-2021 | PAID |
| A2 | 08-26-2021 | 08-29-2021 | PENDING | |
| A3 | 08-26-2021 | 09-05-2021 | PENDING | |
| A4 | 08-26-2021 | 08-30-2021 | PENDING | |
| A1 | 08-28-2021 | 09-02-2021 | 08-25-2021 | PAID |
| A2 | 08-28-2021 | 08-29-2021 | PENDING | |
| A3 | 08-28-2021 | 09-05-2021 | 08-27-2021 | PAID |
| A4 | 08-28-2021 | 08-30-2021 | PENDING | |
| A1 | 08-30-2021 | 09-02-2021 | 08-25-2021 | PAID |
| A2 | 08-30-2021 | 08-29-2021 | PAST_DUE | |
| A3 | 08-30-2021 | 09-05-2021 | 08-27-2021 | PAID |
| A4 | 08-30-2021 | 08-30-2021 | PENDING |
假设今天是 2021 年 8 月 31 日:
| invoice_Id | report_date | due_date | paid_date | status |
|---|---|---|---|---|
| A1 | 08-30-2021 | 09-02-2021 | 08-25-2021 | PAID |
| A2 | 08-30-2021 | 08-29-2021 | PAST_DUE | |
| A3 | 08-30-2021 | 09-05-2021 | 08-27-2021 | PAID |
| A4 | 08-30-2021 | 08-30-2021 | PAST_DUE |
如你所见:
我正在尝试类似的东西:
SELECT report_date, due_date, paid_date,
CASE
WHEN paid_date IS NOT NULL THEN 'PAID'
WHEN report_date > due_date AND paid_date is null THEN 'PAST_DUE'
WHEN report_date <= due_date THEN 'PENDING'
END as status
FROM reported_transaction
但我需要确保每张发票报告交易的最后一行都使用交易中的今天日期。所以而不是:
...
WHEN report_date > due_date AND paid_date is null THEN 'PAST_DUE'
WHEN report_date <= due_date THEN 'PENDING'
...
它使用:
...
WHEN get_date() > due_date THEN 'PAST_DUE'
WHEN get_date() <= due_date THEN 'PENDING'
...
【问题讨论】:
-
我删除了不一致的数据库标签。请仅使用您真正使用的数据库进行标记。
-
@alex 下面的解决方案有效吗?
标签: sql date amazon-redshift