2017-04-18 3 views
2

ich einige Daten aus drei Tabellen wähle mit union dann würde Ich mag sie nach Datum und Zeitstempel sortieren (absteigend):Orakel: Sortierung nach Datum und Zeitstempel

select reportname as name, convert_to_char(a.date) AS created, 
.... 
from table1 

UNION 
select reportname as name, convert_to_char(a.date) AS created, 
.... 
from table2 

UNION 
select reportname as name, convert_to_char(a.date) AS created, 
.... 
from table3 

order by created desc; 

convert_to_char wird wie folgt umgesetzt:

create or replace function convert_to_char(myDate date) 
RETURN varchar IS 
BEGIN 
return TO_CHAR(cast (myDate as timestamp) at local, 'YYYY-MM-DD HH24:MI:SS TZH:TZM'); 
END; 

das Ergebnis der sortierten Daten ich wie folgt aussieht:

created 
------------------ 
2017-04-12 16:07:07 +02:00 
2017-04-13 09:00:01 +02:00 
2017-04-13 09:00:40 +02:00 
2017-04-12 16:06:17 +02:00 
2017-04-12 16:08:37 +02:00 
2017-04-12 16:07:31 +02:00 
2017-04-13 09:00:25 +02:00 
2017-04-13 09:00:25 +02:00 
2017-04-12 16:09:07 +02:00 
2017-04-12 16:08:20 +02:00 
2017-04-12 16:08:06 +02:00 
2017-04-12 16:06:48 +02:00 

Aber ich erwarte das folgende Sortergebnis:

created 
------------------ 
2017-04-13 09:00:40 +02:00 
2017-04-13 09:00:25 +02:00 
2017-04-13 09:00:25 +02:00 
2017-04-13 09:00:01 +02:00 
2017-04-12 16:09:07 +02:00 
2017-04-12 16:08:37 +02:00 
2017-04-12 16:08:20 +02:00 
2017-04-12 16:08:06 +02:00 
2017-04-12 16:07:31 +02:00 
2017-04-12 16:07:07 +02:00 
2017-04-12 16:06:48 +02:00 
2017-04-12 16:06:17 +02:00 

eine Idee, wie Sie das erwartete Sortierergebnis erhalten?

danke im voraus.

+1

'sortieren nach'? In Oracle? –

+0

Warum nicht 'ORDER BY a.date' verwenden –

+0

Ich habe auf" order by "aktualisiert. sortieren nach war Tippfehler –

Antwort

3

Sie können sie zuerst sortieren und wählen Sie dann

select name, created 
from 
(select reportname as name, convert_to_char(a.date) AS created, a.date, 
.... 
from table1 

UNION 
select reportname as name, convert_to_char(a.date) AS created, a.date 
.... 
from table2 

UNION 
select reportname as name, convert_to_char(a.date) AS created, a.date 
.... 
from table3 
order by a.date desc); 
3

Versuchen:

select name, convert_to_char(created) from (
    select reportname as name, date AS created, 
    .... 
    from table1 

    UNION 
    select reportname as name, date AS created, 
    .... 
    from table2 

    UNION 
    select reportname as name, date AS created, 
    .... 
    from table3 
) t 
order by created desc; 
0

Zuerst Ihre Syntax für die UNION-Abfragen falsch ist. Sie können den Alias ​​nur beim ersten SELECT erstellen. Die UNION-Versionen wählen nur Felder mit demselben Datentyp aus.

Zweitens, indem Sie die Gewerkschaften in einer Unterabfrage, können Sie dann direkt aus diesem auswählen und es wird nur gut.

Verwandte Themen