查询基于一列去重

Query to deduplicate based on one columns

我的数据在 Teradata 中看起来像这样

| load_number | id        | time     | slot_time | region | network |
|-------------|-----------|----------|-----------|--------|---------|
| 1692        | 641131146 | 00:20:00 | 00:20:00  | FX-4   | SBOB    |
| 1692        | 641131146 | 00:20:00 | 00:20:30  | FX-4   | SBOB    |
| 1442        | 570732257 | 00:20:00 | 00:20:00  | FX-4   | SBOB    |
| 1442        | 570732257 | 00:20:00 | 00:20:30  | FX-4   | SBOB    |
| 1692        | 641131147 | 00:55:00 | 00:55:00  | FX-4   | SBOB    |
| 1692        | 641131147 | 00:55:00 | 00:55:30  | FX-4   | SBOB    |
| 1442        | 570732258 | 00:55:00 | 00:55:00  | FX-4   | SBOB    |
| 1442        | 570732258 | 00:55:00 | 00:55:30  | FX-4   | SBOB    |
| 14          | 123456    | 00:20:00 | 00:20:00  | ABC    | XYZ     |
| 14          | 123456    | 00:20:00 | 00:20:30  | ABC    | XYZ     |
| 19          | 234567    | 00:20:00 | 00:20:00  | ABC    | XYZ     |
| 19          | 234567    | 00:20:00 | 00:20:30  | ABC    | XYZ     |

如何构建我的 sql 查询来提取最新加载的数据,如下所示:

| load_number | id        | time     | slot_time | region | network |
|-------------|-----------|----------|-----------|--------|---------|
| 1692        | 641131146 | 00:20:00 | 00:20:00  | FX-4   | SBOB    |
| 1692        | 641131146 | 00:20:00 | 00:20:30  | FX-4   | SBOB    |
| 1692        | 641131147 | 00:55:00 | 00:55:00  | FX-4   | SBOB    |
| 1692        | 641131147 | 00:55:00 | 00:55:30  | FX-4   | SBOB    |
| 19          | 234567    | 00:20:00 | 00:20:00  | ABC    | XYZ     |
| 19          | 234567    | 00:20:00 | 00:20:30  | ABC    | XYZ     |

除了idload_number,基本上每个字段都会匹配。因此,假设除了这两个字段之外的每个字段都匹配,我可以通过获取具有更高 load_number 的行来删除 'duplicates'。 regionnetwork 列中的数据可能不同,load_number 也可能不同。

我正在考虑 load_number 上的某种降序 rank() 或对除 idload_number 以外的所有字段匹配的所有列进行窗口化,然后取最高 load_number ,非常感谢任何帮助!

如果我没理解错的话,你可以用row_number()qualify:

select t.*
from t
qualify row_number() over (partition by time, slot_time, region, network order by load_number desc) = 1