2016-10-17 3 views
0

PostgreSQL verwenden Ich habe zwei Abfragen. Ich möchte die beiden Abfragen kombinieren, um zwei ganzzahlige Werte zurückzugeben, die durch Kommas getrennt sind.Kombinieren Sie 2 grundlegende Abfragen, um ein Ergebnis zurückzugeben

SELECT * from newlayerya_1 ORDER BY id DESC LIMIT 1 

SELECT * from newlayerya_1 ORDER BY id ASC LIMIT 1 

- zum Beispiel 141,23

Iv einige Beispiele habe ich versucht, online gefunden, aber da sie keine Freude mit ihm zurückkehren sollte.

CREATE FUNCTION test_ret(a integer, b integer) RETURNS RECORD AS $$ 
DECLARE 
    ret RECORD; 
BEGIN 
    -- Arbitrary expression to change the first parameter 
    --IF LENGTH(a) < LENGTH(b) THEN 
    -- SELECT TRUE, a || b, 'a shorter than b' INTO ret; 
     SELECT * from newlayerya_1 ORDER BY id DESC LIMIT 1 INTO ret; 
-- ELSE 
    -- SELECT FALSE, b || a INTO ret; 
     SELECT * from newlayerya_1 ORDER BY id ASC LIMIT 1 INTO ret; 
    --END IF; 
RETURN ret; 
END;$$ LANGUAGE plpgsql; 
+1

Verwenden Union zwischen Tabellen –

+0

den MySQL-Tag entfernt, da Sie es nicht verwenden. –

+0

Sie verkomplizieren es. Zwei Abfragen UNIONed zusammen, oder zwei Unterabfragen, um sie als Spalten zurückgeben, werden bessere Ausführung Pläne, einfacher Code, etc., etc. – MatBailie

Antwort

1
SELECT 
    (SELECT id from newlayerya_1 ORDER BY id DESC LIMIT 1), 
    (SELECT id from newlayerya_1 ORDER BY id ASC LIMIT 1) 

Sollte eine anti-Muster, wie Gießen ganzen Zahlen als Zeichenfolgen vermeiden.

Oder, noch einfacher ...

SELECT 
    MAX(ID), MIN(ID) 
FROM 
    newlayera_1 
+0

Fehler: Unterabfrage muss nur eine Spalte – John

+0

Ups, kopieren und einfügen Fehler;) Brauchen nur ID auswählen oder entsprechende Spalte. – MatBailie

+0

danke sir ..... – John

0

Das Schlüsselwort UNION tut dies; solange beide Abfragen die gleichen Spalten zurückgeben (was Ihre tut).

2

Versuchen Sie, diese

SELECT id from newlayerya_1 ORDER BY id DESC LIMIT 1 
UNION 
SELECT id from newlayerya_1 ORDER BY id ASC LIMIT 1 

Denken Sie daran, Anzahl des Feldes auf beide Abfrage soll gleich sein.

0
SELECT row_number() OVER (ORDER BY id ASC) as rnum1, 
     row_number() OVER (ORDER BY id DESC) as rnum2 
from newlayerya_1 
where STUFF = 'STUFF' 
limit 1 
0
SELECT * 
FROM yourdatabase 
WHERE ID = (SELECT MAX(ID) FROM yourdatabase) or 
ID = (SELECT MIN(ID) FROM yourdatabase);