Mysql 选择前后最接近的值

Mysql 选择前后最接近的值,mysql,sql,Mysql,Sql,我有一张这样的桌子 假设这张桌子是展示日期 different | date ---------------------- -2 | 2011-04-18 ---------------------- -1 | 2011-04-19 ---------------------- 4 | 2011-04-24 ---------------------- 5 | 2011-04-25 ----------------------

我有一张这样的桌子

假设这张桌子是展示日期

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

我试着按abs排序,但它给出了最接近的2,即-1和-2

(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)
另一种方法-对于大型表,上述解决方案存在问题:

SELECT min(date)
  FROM tbl 
  WHERE date > 0
UNION 
SELECT max(date) 
  FROM tbl 
  WHERE date < 0;

@亚努尔·卢特菲:1。这是一个单一的查询。2.工会怎么了?3.为什么在我浪费时间之前你没有在Q中提到这些?@yanuar lutfi有什么特别的原因吗?@yanuar你可能想使用union,但这是你获得想要的结果的唯一途径。感谢这位男士抽出时间并接受他的回答。该表是select*from select*from某个表的摘要,如果可能的话,我不想让另一个选择超过选择这里有一个单独的查询,尽管它的性能会更差:select*FROM show_date s JOIN select MINA与show_date GROUP的差异小于0 g使用差异您能更清楚地了解输入吗?你有这个表,你输入得到最近的正负值?是不是你输入了一个日期并找到了该日期前后最接近的日期?@Yanuar Lutfi:这不会返回日期,即使我对此进行了投票-我仍然认为笛卡尔乘积不适合此任务。这取决于你的表的大小和分析器的聪明度,不是吗?@user unknown:我不会说mysql的优化器很聪明;-如果我们谈论的是oracle 10+,那么可能是的,但不是mysql。@zerkms:为什么,mysql还没有达到版本10,这也就不足为奇了@安德烈M:别忘了mysql还没有达到oracle的dbms价格-
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;