Home > Enterprise >  Numerate values in a column regardless of order
Numerate values in a column regardless of order

Time:02-18

I have a table like this:

Date Week
2021-01-01 53
2021-01-02 53
2021-01-03 53
2021-01-04 1
2021-01-05 1
2021-01-06 1
2021-01-07 1
... ...
2021-12-30 52
2021-12-31 52

I want to rank weeks not with their values but with Date ascending order. I tried to use

dense_rank() over (order by Week)

and got this results:

Date Week
2021-01-01 53
2021-01-02 53
2021-01-03 53
2021-01-04 1
2021-01-05 1
2021-01-06 1
2021-01-07 1
... ...
2021-12-30 52
2021-12-31 52

But 53rd week is on 53rd rank, not 1st as I want. Do you know what I need to use in that case? Thx

CodePudding user response:

You can try to use MOD function in ORDER BY.

Because the Week Number seem like between 1 to 53, MOD function will calculate

  • MOD(53, 53)=> 0
  • MOD(1, 53) => 1

so on .... .

dense_rank() over (order by MOD(Week, 53))

CodePudding user response:

use order by desc

 select *, row_number()over(order by week desc) from table_name
  • Related