我有一个任务,我必须将排名赋予 NULLS 相对于它的其他非空重复值。
我有一个名为
TABLEA
的表,列为 ID, DATE and Amount
。有一些规则从 TABLEA
过滤几行,列为 ID1, DATE1 and Amount1
和过滤器插入 TABLEB
后的最终结果。
现在我做了 Table A left Join Table B,结果如下。
ID Date AMOUNT ID1 Date1 AMOUNT1
---------------------------------------------------------------
1 2022-10-17 400 NULL NULL NULL
1 2022-10-18 300 1 2022-10-18 300
2 2022-10-19 432 2 2022-10-19 432
2 2022-10-20 100 NULL NULL NULL
2 2022-10-24 200 NULL NULL NULL
2 2022-10-21 234 2 2022-10-21 234
3 2022-10-22 213 3 2022-10-22 213
3 2022-10-23 112 3 2022-10-23 112
3 2022-10-24 218 3 NULL NULL
4 2022-10-23 654 4 2022-10-18 654
5 2022-10-28 500 NULL NULL NULL
我想要在下面示例的行号列中显示的排名。我正在按 ID 分组并按日期排序。
ID Date AMOUNT ID1 Date1 AMOUNT1 Row Number
----------------------------------------------------------------------------
1 2022-10-17 400 NULL NULL NULL 1
1 2022-10-18 300 1 2022-10-18 300 1
2 2022-10-19 432 2 2022-10-19 432 1
2 2022-10-20 100 NULL NULL NULL 1
2 2022-10-24 200 NULL NULL NULL 1
2 2022-10-21 234 2 2022-10-21 234 2
3 2022-10-22 213 3 2022-10-22 213 1
3 2022-10-23 112 3 2022-10-23 112 2
3 2022-10-24 218 3 NULL NULL 2
4 2022-10-23 654 4 2022-10-18 654 1
5 2022-10-28 500 NULL NULL NULL 1
我尝试使用 row_number/dense_rank/rank 函数,但找不到解决方案。
SQL 查询已尝试:
Select a.ID , a.date , a.amount , b.id1, b.date1, b.amount1 from TableA a
, row_number() over (partition by b.id1 order by case when b.date1 is not null then b.date1 end) ROW Number
left join TableB b
on a.id = b.id
我正在使用行号,因为我的任务是对前 2 个 amount1 求和。为了 示例:ID 1 有 2 个数量 400 和 300,但数量 1 只有一个,即 300. 所以我必须求和得到数量列中的 400 和 300 以及数量 1 列中的 300 的总和。另一个例子,对于 ID = 2 ,列 Amount 的总和 将是 (432 + 100+ 200 + 234) 并且 Amount1 的总和是 (432 + 234) 作为 这些是 ID=2 的前两个。