Seite 1 von 1

[gelöst] ORDER BY LIMIT 1 zusammenfassen

Verfasst: Fr, 17.05.2013 15:29
von marc 70
hi,

komme bei der Abfrage nicht weiter.
alles einzeln passt schon mal :)

Code: Alles auswählen

SELECT "mass","text" FROM "Tabelle" WHERE "
"mass" >=  'x'
ORDER BY "mass" ASC LIMIT 1
-----------------------------------------------------------
SELECT "mass","text" FROM "Tabelle" WHERE "
"mass" >=  'y'
ORDER BY "mass" ASC LIMIT 1
-----------------------------------------------------------
SELECT "mass","text" FROM "Tabelle" WHERE "
"mass" <=  'x'
ORDER BY "mass" DESC LIMIT 1
-----------------------------------------------------------
SELECT "mass","text" FROM "Tabelle" WHERE "
"mass" <=  'y'
ORDER BY "mass" DESC LIMIT 1
wenn z.B. X=23 y=57
dann ist die Ausgabe je SELECT : 25,d ; 60,i ; 20,c ; 50,h
Wie kann man die ganze Abfrage zusammenfassen als ein SELECT ?

und wenn z.B. x=25 und y=60
dann ist die Ausgabe je SELECT : 25,d ; 60,i ; 25,d ; 60,i
wie kann man dann doppelte werte unterdrücken?

Apache OpenOffice 3.4.1
StarBasic Dialog
HSQLDB intern

vielen Dank im voraus
gruß marc

Re: ORDER BY LIMIT 1 zusammenfassen

Verfasst: Fr, 17.05.2013 19:16
von RobertG
Hallo Marc,
marc 70 hat geschrieben: wenn z.B. X=23 y=57
dann ist die Ausgabe je SELECT : 25,d ; 60,i ; 20,c ; 50,h
Wie kann man die ganze Abfrage zusammenfassen als ein SELECT ?

Code: Alles auswählen

SELECT "mass","text" , 
(SELECT "mass" FROM "Tabelle" WHERE "mass" >=  '57' ORDER BY "mass" ASC LIMIT 1) AS "mass2", 
(SELECT "text" FROM "Tabelle" WHERE "mass" >=  '57' ORDER BY "mass" ASC LIMIT 1) AS "text2" 
FROM "Tabelle" WHERE "mass" >= '23' ORDER BY "mass" ASC LIMIT 1
Du darfst beim Zusammenfassen immer nur eine Wert mit einer Abfrage ermitteln. Der obige Code zeigt jetzt also bei Deiner Tabelle
25,d,60,i
an.

Die Doppelwerte kannst Du zwar unterdrücken, die Spalten selbst werden aber bleiben:

Code: Alles auswählen

SELECT "mass","text" , 
(SELECT "mass" FROM "Tabelle" WHERE "mass" >=  '60' ORDER BY "mass" ASC LIMIT 1) AS "mass2", 
(SELECT "text" FROM "Tabelle" WHERE "mass" >=  '60' ORDER BY "mass" ASC LIMIT 1) AS "text2",  
NULLIF( 
	(SELECT "mass" FROM "Tabelle" WHERE "mass" <=  '25' ORDER BY "mass" DESC LIMIT 1), 
	"mass" ) AS "mass3", 
NULLIF( 
	(SELECT "text" FROM "Tabelle" WHERE "mass" <=  '25' ORDER BY "mass" DESC LIMIT 1), 
	"text" ) AS "text3",  
NULLIF( 
	(SELECT "mass" FROM "Tabelle" WHERE "mass" <=  '60' ORDER BY "mass" DESC LIMIT 1), 
	(SELECT "mass" FROM "Tabelle" WHERE "mass" >=  '60' ORDER BY "mass" ASC LIMIT 1) ) AS "mass4", 
NULLIF( 
	(SELECT "text" FROM "Tabelle" WHERE "mass" <=  '60' ORDER BY "mass" DESC LIMIT 1), 
	(SELECT "text" FROM "Tabelle" WHERE "mass" >=  '60' ORDER BY "mass" ASC LIMIT 1) ) AS "text4" 
FROM "Tabelle" 
WHERE "mass" >= '25' 
ORDER BY "mass" ASC LIMIT 1
Gruß

Robert

Re: ORDER BY LIMIT 1 zusammenfassen

Verfasst: Fr, 17.05.2013 23:55
von marc 70
Hallo Robert,

DANKE, super Arbeit...
Kommt ja einiges zusammen an Abfragen.(Hab hier eine Tabelle mit 4 Spalten wovon ich 3 brauche) :shock:

NULLIF passt auch.

noch mal Danke für deine Mühen

Gruß marc