2016-05-15 6 views
1

Die vereinfachte Version ist dies: Ich habe eine Tabelle mit zwei Feldern. Das erste Feld, trx, hat immer einen Wert. Das zweite Feld tstop kann entweder Null oder ein Zeitstempel sein.Gruppierung wählen Ausgabe von Null-Wert in PostgreSQL

Ich möchte die Ausgabe von der Auswahl so organisieren, dass die erste "Gruppe" von Datensätzen alle tstop von null haben, die verbleibenden Datensätze haben einen Nicht-Null-Wert von tstop. Jede Gruppe ist geordnet nach trx desc.

Wie wird das gemacht?

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"; ""; 

gewünschte Ausgabe:

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"; 

Dies wird sich natürlich nicht:

select * from rx order by trx desc; 

Antwort

2

Sie könnten IS NULL:

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

SqlFiddleDemo

+1

Arbeiten wie ein Charme. Vielen Dank. –

0

ORDER BY (CASE WHEN TStop IS NULL THEN 1 ELSE 0 END) DESC, TStop DESC

1

Nur order by die Spalten und verwenden Sie die Option nulls firstnull Werte erscheinen zuerst:

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

'NULLS FIRST' ist eine nette Option, aber check ** [demo] (http://sqlfiddle.com/#!15/28e5a0/3/0) ** letzten zwei Datensätze, OP will Gruppierung von NULL/NOT NULL und Bestellung von trx DESC – lad2025