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;