2016-05-15 7 views
1

簡略化されたバージョンは次のとおりです。私は2つのフィールドを持つテーブルを持っています。最初のフィールドtrxは常に値を持ちます。 2番目のフィールドtstopは、NULLまたはタイムスタンプのいずれかです。PostgreSQLで選択した出力をヌル値でグループ化する

レコードの最初の「グループ」のすべてがtstopのヌルを持ち、残りのレコードのヌル以外の値がtstopであるように、selectの出力を整理したいとします。各グループの順序はtrxです。

これはどのように行われますか?

TABLE rx 
(
    recid serial NOT NULL, 
    trx timestamp without time zone NOT NULL, 
    tstop timestamp without time zone 
) 

Example values: 
recid trx      tstop 
36;  "2014-06-10 13:05:16"; ""; 
113759; "2014-06-10 13:05:16"; ""; 
33558; "2014-03-31 18:08:15"; "2014-03-31 18:08:15"; 
12535; "2014-03-31 18:08:15"; ""; 
660;  "2014-03-31 18:05:59"; ""; 
144209; "2014-03-30 19:21:14"; ""; 

所望の出力は:

recid   trx     tstop 
36;  "2014-06-10 13:05:16"; ""; 
113759; "2014-06-10 13:05:16"; ""; 
12535; "2014-03-31 18:08:15"; ""; 
660;  "2014-03-31 18:05:59"; ""; 
144209; "2014-03-30 19:21:14"; ""; 
33558; "2014-03-31 18:08:15"; "2014-03-31 18:08:15"; 

これは明らかに動作しません。

select * from rx order by trx desc; 

答えて

2

IS NULLを使用できます。

SELECT * 
FROM rx 
ORDER BY tstop IS NULL DESC, trx DESC 

SqlFiddleDemo

+1

作品。ありがとう。 –

0

ORDER BY DESC、 TSTOPのDESC

(CASEをTSTOPがTHEN 1つのELSE 0 END NULLされている場合)
1

だけorder by列とnull値が最初に表示されるようにするオプションnulls first使用:魔法のように

SELECT * 
FROM rx 
ORDER BY tstop DESC NULLS FIRST, trx DESC 
+0

'NULLS FIRST'は素晴らしいオプションですが、** [demo](http://sqlfiddle.com/#!15/28e5a0/3/0)**最後の2レコードをチェックし、OPはNULL/NOT NULLでグルーピングしたいtrx DESCによる注文 – lad2025

関連する問題