0

我有一张桌子(实际上是一个视图)

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 行,有效的结果可以从全到无。

4

2 回答 2

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
于 2013-05-29T14:04:37.353 回答
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
于 2013-05-29T14:08:00.610 回答