我试图对一个数据集进行排序,以确定一个账户号码每天出现的次数,这样我就可以根据次数采取相应的措施。
我的数据显示如下。
+---------------+-----------+-----------+------------------+-----------+---------------+-----------+-----------+-----------+-------------+
| accountnumber | ctry_code | prod_code | comm_file_postdt | post_dt | comm_file_pay | payment | comm_diff | days_diff | mindue_diff |
+---------------+-----------+-----------+------------------+-----------+---------------+-----------+-----------+-----------+-------------+
| 1234 | MX | PR | 6/29/2020 | 6/26/2020 | -583.5 | -583.5 | 0.01 | 105 | |
| 1234 | MX | PR | 6/29/2020 | 6/27/2020 | -443.85 | -443.85 | 0.01 | 138 | |
| 1234 | MX | GL | 6/30/2020 | 6/26/2020 | -2783.25 | -2783.25 | 0.01 | 141 | |
| 1234 | MX | OP | 6/30/2020 | 6/26/2020 | -4000 | -4000 | 0.01 | 57 | 0 |
| 1235 | MX | OP | 6/29/2020 | 6/27/2020 | -3794.65 | -3794.65 | -35.84 | 102 | 239 |
| 1236 | MX | OP | 6/29/2020 | 6/27/2020 | -239 | -239 | 35.85 | 102 | -537.5 |
| 1237 | MX | OP | 6/29/2020 | 6/27/2020 | -345.67 | -345.67 | -34.57 | 38 | 345.67 |
| 1238 | MX | OP | 6/29/2020 | 6/26/2020 | -3000 | -3000 | 371.91 | 63 | -2479.4 |
| 1238 | MX | OP | 6/29/2020 | 6/26/2020 | -1661.5 | -1661.5 | 0.01 | 41 | -11950.16 |
| 1238 | MX | OP | 6/29/2020 | 6/27/2020 | -15466.24 | -15466.24 | -1091.34 | 12 | 10913.46 |
+---------------+-----------+-----------+------------------+-----------+---------------+-----------+-----------+-----------+-------------+
我想做的是对每个单独的comm_file_postdt的每个账号进行排序。
基于下面的表格,我的预期结果将是:。
+---------------+------------------+------+
| accountnumber | comm_file_postdt | rank |
+---------------+------------------+------+
| 1234 | 6/29/2020 | 1 |
| 1234 | 6/29/2020 | 2 |
| 1234 | 6/30/2020 | 1 |
| 1234 | 6/30/2020 | 2 |
| 1235 | 6/29/2020 | 1 |
| 1236 | 6/29/2020 | 1 |
| 1237 | 6/29/2020 | 1 |
| 1238 | 6/29/2020 | 1 |
| 1238 | 6/29/2020 | 2 |
| 1238 | 6/29/2020 | 3 |
+---------------+------------------+------+
然而,我在每一次迭代中得到的排名都是1。
我已经做了以下工作。
Select *,
rank() over(partition by accountnumber order by comm_file_postdt) as rank from tableA
select*,
rank() over(partition by accountnumber, comm_file_postdt order by post_dt) as rank from tableA
以及其他一些方法,但无论我如何尝试分区和顺序中的任何数值组合,我都得到了所有的排名为1。
任何关于我可能做错了什么的指导将是非常有用的。
2条答案
按热度按时间jjhzyzn01#
这是你的代码。
你的数据中有多条具有相同 "accountnumber "和 "comm_file_postdt "的记录:这些是并列的,所以
rank()
给它们分配相同的值。最干净的解决方案是使用另一列来打破联系 - 可能是
post_dt
。或者你可以使用
row_number()
,这样可以保证没有重复。然而,如果没有一个确定的order by子句,就不能确定哪条并列的行会被排在第一位:这可能是,也可能不是你想要的。2mbi3lxu2#
如果你想知道有多少次,你可能要找的是row_number()。
结果