我能否以某种方式仅选择具有相同id的行,其中值之间的差异不超过10?
CREATE TABLE EXAMPLE_TEST (ID NUMBER, VALUE NUMBER);
INSERT INTO EXAMPLE_TEST(ID, VALUE) VALUES (1, 1);
INSERT INTO EXAMPLE_TEST(ID, VALUE) VALUES (2, 4);
INSERT INTO EXAMPLE_TEST(ID, VALUE) VALUES (1, 9);
INSERT INTO EXAMPLE_TEST(ID, VALUE) VALUES (2, 15);
INSERT INTO EXAMPLE_TEST(ID, VALUE) VALUES (1, 17);
我唯一想到的就是加入同一个表,但这显然是错误的方法,因为你不知道会有多少行。
可能PLSQL是关键吗?但我也无法想出来。答案 0 :(得分:3)
您想要选择存在每条记录的近值记录。所以使用EXISTS
:
select *
from example_test
where exists
(
select *
from example_test other
where other.id = example_test.id
and other.value <> example_test.value
and abs(other.value - example_test.value) <= 10
)
order by id, value;
答案 1 :(得分:1)
您可以使用JOIN
:
SELECT *
FROM Example_test e1
JOIN Example_test e2
ON e1.ID = e2.id
AND ABS(e1.value-e2.value) < 10
AND e1.value ^= e2.value;
-- to get nice triangular join you need some kind of unique column
-- (identity/sequence/timestamp)
<强> DBFiddle Demo 强>
编辑:
看起来非常令人印象深刻。但为什么我需要一个独特的列? rowid会工作吗?
好点
SELECT *
FROM Example_test e1
JOIN Example_test e2
ON e1.ID = e2.id
AND ABS(e1.value-e2.value) < 10
AND e1.rowid > e2.rowid;
<强> DBFiddle Demo2 强>