【发布时间】:2018-08-16 12:56:23
【问题描述】:
我有一个生产案例,我们跟踪在仓库中移动的设备。我有一个表格,显示这些以前的位置,如下所示:
+--------+------------+-----------+------+
| device | current_WH | date | rank |
+--------+------------+-----------+------+
| 1 | AB | 3/15/2018 | 7 |
| 1 | CC | 3/19/2018 | 6 |
| 1 | CC | 3/22/2018 | 5 |
| 1 | CC | 3/22/2018 | 5 |
| 1 | DD | 4/23/2018 | 4 |
| 1 | DD | 5/11/2018 | 3 |
| 1 | DD | 5/15/2018 | 2 |
| 1 | DD | 5/15/2018 | 2 |
| 1 | AA | 6/6/2018 | 1 |
| 1 | AA | 6/6/2018 | 1 |
+--------+------------+-----------+------+
但我需要找到那些唯一的 current_WH 值并将设备减少到一行(有数百万个设备),如下所示:
+--------+------------+--------+--------+--------+
| device | current_WH | prev_1 | prev_2 | prev_3 |
+--------+------------+--------+--------+--------+
| 1 | AA | DD | CC | AB |
+--------+------------+--------+--------+--------+
我使用了排名功能(按日期按设备顺序分组)。它几乎做到了,但并不完全。您不能对 current_WH 进行排名,因为它会按字母顺序排列。我需要按时间对 current_WH 进行排名。
知道如何实现第二个表吗?谢谢你的帮助!
【问题讨论】:
-
你试过什么?向我们展示你的尝试。
-
我这样试过,实现了第一张表。 select device, current_WH, date, dense_rank() over(partition by device_id order by devev_day desc) rnk from table order by device, date;
-
嗯.....我输入了硬回报以使其更易于阅读;不知道为什么它不显示。