我有以下坐标记录
我想要的是,把所有的记录拿到哪里 z1
与任何其他记录的差异小于4(基本要求)
这意味着在上表中,最后两条记录的差值小于4,然后我想在查询中获取它们。
如果有新的记录 z1 = 808
存在,则应返回此记录和id为28478的记录,因为它们的差值小于4。
有什么方法可以在mysql中实现这一点吗?
或者php,不用说那么久就可以做到?
编辑:以下是数据:
+-------+-------+-------+-------+-------+
| id | x1 | x2 | z1 | z2 |
+-------+-------+-------+-------+-------+
| 28478 | -1500 | -1496 | 804 | 808 |
| 29929 | -1500 | -1496 | 1444 | 1448 |
| 30051 | -1500 | -1496 | -1168 | -1164 |
| 30346 | -1500 | -1496 | -336 | -332 |
| 28039 | -1496 | -1492 | -1128 | -1124 |
| 28969 | -1496 | -1492 | -1424 | -1420 |
| 29265 | -1496 | -1492 | -520 | -516 |
| 29872 | -1496 | -1492 | 1288 | 1292 |
| 30122 | -1496 | -1492 | -932 | -928 |
| 30846 | -1496 | -1492 | 1376 | 1204 |
| 30898 | -1496 | -1492 | 1380 | 1384 |
+-------+-------+-------+-------+-------+
我试过了
select *
from coordinates t
where
x1 between -1500 and -1500 + 4
and exists (
select 1
from coordinates t1
where t1.id <> t.id
and abs(t1.z1 - t.z1) <= 4);
但没用。
1条答案
按热度按时间new9mtju1#
你可以用
exists
:不使用可能更有效
abs()
:db fiddle上的演示-两个查询都产生: