Выберите ближайшее значение до и после - PullRequest
4 голосов
/ 15 апреля 2011

У меня есть такая таблица

допустим, что таблица show_date

different | date
----------------------  
    -2    | 2011-04-18
----------------------
    -1    | 2011-04-19
----------------------
     4    | 2011-04-24
----------------------
     5    | 2011-04-25 
----------------------

Я хочу выбрать 2 значения, первое из которых является первым отрицательным значением, а второе - первым положительным значением. в этом примере будут приведены -1 (2011-04-19) и 4 (2011-04-24)

Я пробовал заказывать по абс (разному), но он дает 2 ближайших, что равно -1 и -2

Ответы [ 3 ]

4 голосов
/ 15 апреля 2011
(SELECT * FROM show_date WHERE different < 0 ORDER BY different DESC LIMIT 1)
UNION ALL
(SELECT * FROM show_date WHERE different >= 0 ORDER BY different LIMIT 1)
3 голосов
/ 15 апреля 2011
SELECT
  MIN(CASE WHEN different > 0 THEN different ELSE NULL END) AS MinPositive,
  MAX(CASE WHEN different < 0 THEN different ELSE NULL END) AS MaxNegative
FROM show_date
1 голос
/ 15 апреля 2011
SELECT 
   min (a.nr), 
   max (b.nr) 
FROM 
  demo a, 
  demo b 
WHERE a.nr > 0 
  AND b.nr < 0;

 min | max
-----+----
   1 | -1
(1 Row)

Альтернативный подход - вышеуказанное решение становится проблематичным для больших таблиц:

SELECT min(date)
  FROM tbl 
  WHERE date > 0
UNION 
SELECT max(date) 
  FROM tbl 
  WHERE date < 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...