我有一张桌子(实际上是一个视图)
id INTEGER, x1 INTEGER, y1 INTEGER, x2 INTEGER, y2 INTEGER
现在我需要选择所有行的id,对于该行,给定行的所有值的总和低于零,
x1 + y1 + x2 + y2 + x3 + y3 + x4 + y4< 0
实际上我有更复杂的公式,但现在没关系。我知道我必须自己创建这个表的INNER JOIN,但仍然无法构成正确的表达式。
我使用SQLite + Python,如果重要的话。表中大约有100 000行,有效结果可以从all到none。
答案 0 :(得分:0)
如果我理解你所追求的是什么,那么应该这样做:
SELECT a.id
FROM mytable a
JOIN mytable b ON b.id=some_special_value
WHERE a.x1 + a.x2 + a.y1 + a.y1 + b.x1 + b.x2 + b.y1 + b.y2 < 0
答案 1 :(得分:0)
你需要获得下一行。我假设这是一个大于给定行的id的最小id。下面使用相关子查询计算下一个id,然后加入下一行的信息:
select *
from (select t.*,
(select t2.id from t t2 where t2.id > t.id order by t2.id limit 1
) nextId
from t
) t left outer join
t tnext
on t.nextId = tnext.Id
where (t.x1 + t.y1 + t.x2 + t.y2) + (tnext.x1 + tnext.y1 + tnext.x2 + tnext.y2) < 0
然后,您可以访问t
和tnext
中的字段。
如果知道下一行的id
比上一行大1,那么您可以将其简化为:
select *
from t left outer join
t tnext
on t.id + 1 = tnext.id
where (t.x1 + t.y1 + t.x2 + t.y2) + (tnext.x1 + tnext.y1 + tnext.x2 + tnext.y2) < 0