0

私はテーブルを持っています(実際にはビュー)

id INTEGER, x1 INTEGER, y1 INTEGER, x2 INTEGER, y2 INTEGER

ここで、すべての行の id を選択する必要があります。その行では、その行のすべての値の合計が 1 つの行でゼロ未満です。

x1 + y1 + x2 + y2 + x3 + y3 + x4 + y4 < 0

実際にはもっと複雑な式がありますが、今は問題ありません。このテーブル自体で INNER JOIN を作成する必要があることは理解していますが、それでも正しい式を作成できません。

問題があれば、SQLite + Python を使用します。テーブルには約 100,000 行あり、有効な結果はすべてからなしになります。

4

2 に答える 2

0

If I understand correctly what you're after, than something like this should do it:

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

次の行が前の行よりもちょうど 1 大きいことがわかっている場合は、次のidように単純化できます。

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 に答える