【发布时间】:2021-10-25 01:38:09
【问题描述】:
我看到有人问过类似的问题,但没有完全类似的问题,我自己也无法弄清楚。在下面的示例表中,前三列已经存在于日历表中,用于引用公司财务日历的复杂性。我将从最早到最晚的日期按 transaction_dt 订购。第 4 列“count_column”是我想要添加的 - 只是一个从 1 开始向上计数的列,每次财政周发生变化。我希望它也忽略每个新日历年的会计周重置为 1 时。我希望 count_column 从 1 开始向上计数并且永远不会重置,只要将新的周数添加到此表中,就继续计数。
有意义吗?我觉得这应该很简单,但我无法破解它。提前致谢。
| transaction_dt | fiscal_week | fiscal_year | count_column |
|---|---|---|---|
| 2020-12-28 | 52 | 2020 | 1 |
| 2020-12-29 | 52 | 2020 | 1 |
| 2020-12-30 | 52 | 2020 | 1 |
| 2020-12-31 | 52 | 2020 | 1 |
| 2021-01-01 | 52 | 2020 | 1 |
| 2021-01-02 | 52 | 2020 | 1 |
| 2021-01-03 | 52 | 2020 | 1 |
| 2021-01-04 | 01 | 2021 | 2 |
| 2021-01-05 | 01 | 2021 | 2 |
| 2021-01-06 | 01 | 2021 | 2 |
| 2021-01-07 | 01 | 2021 | 2 |
| 2021-01-08 | 01 | 2021 | 2 |
| 2021-01-09 | 01 | 2021 | 2 |
| 2021-01-10 | 01 | 2021 | 2 |
| 2021-01-11 | 02 | 2021 | 3 |
【问题讨论】:
-
请用您正在使用的 DBMS 标记您的问题
-
一个问题是该列是否是您要在插入时填充的列(我认为这就是您所说的),或者您是否有一个包含三列的表并想要一个能够提供四列,第四列正确计算。如果是前一种方式(可能不是最优雅的触发器是(在伪 plsql 中)
select fiscal_week, count_column into max_week, max_count from table order by transaction_date desc fetch first 1 rows only; :new.count_column := case when :new.fiscal_week = max_week then max_count else max_count+1 end; -
如果您需要查询,您可以根据财政年 * 52 加上财政周减去一些基值来计算第四列
-
克里斯 - 我不认为 (year+week)-(min seen year+week) 可以工作,因为如果一周有 0 个交易,它会跳过 count_column 值。跨度>
-
如果您想将此作为查询,
dense_rank()就是您要查找的内容,here's a fiddle。如果您想将其作为一个专栏,请参阅 Chris 之前的评论。
标签: sql postgresql count rank