2017-02-01 6 views
0

私は3列(id、date、number)のテーブルを持っています は1から9999までの値です。9999に達するとすべての系列は負の数に変更されますPostgreSQLで循環シリーズでソートを行う方法

26 3.1.17  5 
25 3.1.17  4 
21 2.1.17 -9999 
3  2.1.17 -9998 
4  2.1.17 -9997 
51 2.1.17  3 
6  2.1.17  2 
7  2.1.17  1 
10 1.1.17 -9996 

は基本的に並べ替え:

select id,date,number 
from table 
order by date DESC, abs(number) DESC 

これは、次のような結果になります:別名-1 -9999まで)と、それは1

からやり直すこれが私のクエリですデータは日付で、次に番号列で表示されます。 ソートは日付によるものなので、ほとんどの場合、数字が-9999から1に変更された日付で処理されます。

これは、結果、私はそれを行うことができますどのように

id date number 
26 3.1.17  5 
25 3.1.17  4 
51 2.1.17  3 
6  2.1.17  2 
7  2.1.17  1 
21 2.1.17 -9999 
3  2.1.17 -9998 
4  2.1.17 -9997 
10 1.1.17 -9996 

すべきですか?

答えて

2

試してみてください。

select id,date,number 
from a_table 
order by date desc, number < 0, abs(number) desc 
0
order by date DESC, 
     CASE WHEN number > 0 -- SORT THE POSITIVES 
       THEN number 
       ELSE NULL -- dont need it, NULL is the default if you omit ELSE 
     END DESC, 
     number ASC -- SORT THE NEGATIVES 
2

正の数値が最初にソートされていることを確認する必要があります。

これは順に式を使用して達成することができます。

select id, date, number 
from the_table 
order by date, 
     case 
      when number > 0 then 1 
      else 2 
     end, --<< this makes the positive numbers come first 
     abs(number) desc 
関連する問題