2017-01-11 13 views
0

誰もレコードをソートするのを手伝ってもらえますか(Postgresデータベース)?レコードは日付順、日付順にソートされます。

には、以下の私は、全体の日付の日付部分でソートしてきた私のテーブルの1に対するクエリの結果である(ORDER BY extract(DAY from cast(date as DATE))

注::すべての日付はYYYY-MM-DD形式である

2016-03-01 
2016-09-01 
2016-08-01 
2016-12-01 
2016-01-01 
2016-07-01 
2016-11-01 
2016-02-01 
2016-06-01 
2016-10-01 
2016-04-01 
2016-05-01 
2016-07-22 
2016-08-22 
2016-10-22 
2016-09-22 
2016-11-22 
2016-12-22 

日付部分ごとにレコードをソートするので、これは良いです。しかし、私が望むのは、すべてのレコードが日付部分に基づいてソートされるような結果でなければならないため、日付1のすべてのレコードが日付22のすべてのレコードの前に来るようにする必要があります。 date 22 by month part(上記の結果セットを見ると、日付部分ではなく月の部分でソートされていることがわかります)。

ORDER BY extract(DAY from cast(date as DATE)),  -- first sort by day 
     date          -- then sort by date 

この順序は、最初の日に1つのレコードを配置します:

2016-01-01 
2016-02-01 
2016-03-01 
2016-04-01 
2016-05-01 
2016-06-01 
2016-07-01 
2016-08-01 
2016-09-01 
2016-10-01 
2016-11-01 
2016-12-01 
2016-07-22 
2016-08-22 
2016-09-22 
2016-10-22 
2016-11-22 
2016-12-22 
+0

1と22以外の日数はありますか? –

+0

はい、私は持っています。しかし、あなたは解決策を次のように働いているようです 'ORDER BYのエキス(日時からキャスト(日付として日付))、 – Hannan

答えて

1

は、2つのステップの順序を使用し、わずか数日の各ブロック内の別のソートを追加し、次のように基本的に私が欲しい結果が見えるはずです(22日目)は最後に記録されます。 1/22日付の各ブロック内で、レコードは日付順に昇順に並べられます。

+0

ちょっと@Tim Biegeleisen、解決に感謝。私はあなたの最初のソリューションをCASEステートメントですぐに疲れさせ、現在の結果セットに取り組みました。しかし、私が心配しているのは、日付が1と22以外のときに動作するかどうかです。 – Hannan

+0

これは魅力的な作品です。サンクス: – Hannan

関連する問題