SQL ранг и раздел - PullRequest
       8

SQL ранг и раздел

0 голосов
/ 28 сентября 2018

, используя этот запрос

SELECT STC.*, rank() over (partition by service_id order by service_tracking_id desc) rnk
FROM pntt.ntt_service_tracking_curr stc
where service_id in 
('61NA', 

, а ответ

rnk service_id service_tracking_id
1   61NA    7112415
2   61NA    5202885
3   61NA    44427875
4   61NA    2390953
5   61NA    117139
6   61NA    117138
7   61NA    10586781

Почему он так ранжируется?Это как-то связано с типом поля Service_id?Нужно ли приводить его как целое число или это связано с длиной поля?

1 Ответ

0 голосов
/ 28 сентября 2018

Поскольку service_tracking_id является строкой, поэтому порядок имеет алфавитный, а не числовой тип.

Вот один из способов исправить это:

SELECT STC.*,
       rank() over (partition by service_id
                    order by length(service_tracking_id) desc, service_tracking_id desc  -- might be len
                    ) rnk

В качестве альтернативы приведите значение кдесятичное число:

SELECT STC.*,
       rank() over (partition by service_id
                    order by cast(service_tracking_id as decimal(20, 2)) desc
                    ) rnk
...