2016-10-17 5 views
0

Использование PostgreSQL У меня есть два запроса. Я хочу объединить два запроса, чтобы вернуть два целочисленных значения, разделенных запятыми.объединить 2 основных запроса, чтобы вернуть один результат

SELECT * from newlayerya_1 ORDER BY id DESC LIMIT 1 

SELECT * from newlayerya_1 ORDER BY id ASC LIMIT 1 

- должен вернуться к примеру 141,23

Iv пробовал некоторые примеры, которые я нашел в Интернете, но не имея радости с ним.

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

Используйте объединение между таблицами –

+0

Удалены тег MySQL, так как вы не используете. –

+0

Ты слишком импонимаешь. Два запроса UNIONed вместе или два подзапроса для их возврата в виде столбцов позволят улучшить планы выполнения, более простой код и т. Д. – MatBailie

ответ

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

Следует избегать любых антишаблоны, таких как литье целых чисел в виде строк.

Или, еще проще ...

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

ОШИБКА: в подзапросе должен быть возвращен только один столбец – John

+0

Ошибка при копировании и вставке;) Необходимо выбрать только идентификатор или соответствующей колонки. – MatBailie

+0

спасибо, сэр ..... – John

0

Ключевое слово UNION делает это; до тех пор, пока оба запроса возвращают те же столбцы (что делает ваш).

2

Попробуйте

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

Помните номер поля на обоих запроса должны быть одинаковыми.

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); 
Смежные вопросы