[risolto] Campo con doppio ordimanento

  • Creatore Discussione Creatore Discussione khuhn
  • Data di inizio Data di inizio

khuhn

Nuovo Utente
5 Feb 2014
4
0
0
Ho un problema che spero qualcuno sappia risolvere:
si tratta di ottenere una tabella in cui il campo data sia ordinato in due modi: crescenti le date maggiori, decrescenti se minori di quella attuale.
Es:
domani
dopodomani
------
oggi
ieri
l'altro ieri
----
Grazie.
 
Ciao,
un idea immediata potrebbe essere quella di utilizzare il comando "UNION".
Nell'esempio che riporto sotto, ho preso in esame il periodo 3 feb - 9 feb

Codice:
SELECT * FROM (
SELECT DATA_CALENDARIO
 FROM TB_CALENDARIO
WHERE DATA_CALENDARIO >= SYSDATE AND DATA_CALENDARIO BETWEEN '03-FEB-2014' AND '09-FEB-2014'
ORDER BY DATA_CALENDARIO ASC
)
UNION ALL
SELECT * FROM (
SELECT DATA_CALENDARIO
 FROM TB_CALENDARIO
WHERE DATA_CALENDARIO < SYSDATE  AND DATA_CALENDARIO BETWEEN '03-FEB-2014' AND '09-FEB-2014'
ORDER BY DATA_CALENDARIO DESC
)

Facci sapere
Ciao
Mik


A quick solution is a shortcut to troubleshooting
HolidaySoft.it - Gestionali, Database, SitiWeb
GarganoSapori.it - Olio ExtraVergine del Gargano
OsteriaORistorante.it - Crea la Vetrina per il tuo Ristorante!
 
Grazie per la risposta ma la tua soluzione non sembra funzionare.
Uso MYSQL con ASP e mi viene segnalato il seguente errore: ODBC driver does not support the requested properties .
Credo che dipenda dal fatto che non è possibile usare due ORDER BY sullo stesso campo con UNION, ma forse mi sbaglio.
Ciao.
 
Ciao,
credo che l'errore sia da individuare in altro punto. Il discorso del doppio order by l'ho risolto inserendo le select con gli order by all'interno di due subselect.
Dovresti eseguire la query da phpmyadmin o altro client mysql ed individuare puntualmente l'errore.
Potrebbe essere:
- al posto di UNION ALL metti UNION
- metti un alias alle due subselect
- la versione di Mysql non è aggiornata per poter far funzionare la UNION

SELECT * FROM (
SELECT DATA_CALENDARIO
FROM TB_CALENDARIO
WHERE DATA_CALENDARIO >= SYSDATE AND DATA_CALENDARIO BETWEEN '03-FEB-2014' AND '09-FEB-2014'
ORDER BY DATA_CALENDARIO ASC
) A
UNION ALL
SELECT * FROM (
SELECT DATA_CALENDARIO
FROM TB_CALENDARIO
WHERE DATA_CALENDARIO < SYSDATE AND DATA_CALENDARIO BETWEEN '03-FEB-2014' AND '09-FEB-2014'
ORDER BY DATA_CALENDARIO DESC
) B

Comunque, il messaggio di errore "ODBC driver does not support the requested properties" è troppo generico per poterti aiutare
Ciao
Mik


A quick solution is a shortcut to troubleshooting
HolidaySoft.it - Gestionali, Database, SitiWeb
GarganoSapori.it - Olio ExtraVergine del Gargano
OsteriaORistorante.it - Crea la Vetrina per il tuo Ristorante!
 
Ciao,
il problema si è risolto con gli alias.
In effetti phpmyadmin segnalava un errore in quella posizione..
Ti ringrazio molto per l'aiuto.
 
In giro sul web ho trovato anche questa soluzione:

SELECT
(
CASE WHEN data_cal >= sysdate( )
THEN 1
ELSE 0
END
)
presort, data_cal FROM tab_cal
ORDER BY presort DESC , data_cal DESC

Che ne pensi?
Ciao.
 

Discussioni simili