1

次のようなデータベース列があります。

id
50
55
56
62
63
64
65
68
70
72
80

etc...

次の式を使用して id 列を反復処理し、式の結果が同じ列の id 番号であるかどうかを確認します。id 列の基本的に 3 つのレコードのセットの可能な組み合わせをすべて計算したいと考えています。

最初のループ: ((second_id_number - first_id_number) * variable decimal) + second_id_number は id 列の数値と同じですか?

式によると、最初のループは (55-50)*2.00 (変数 decimal の例として) + 55 = 65 です。65 はリストにあります => 65 はそれに等しい 2 つのレコードでタグ付けされます

2 番目のループ: ((third_id_number - first_id_number) * variable decimal) + second_id_number は id 列の数値と同じですか? (56-50)*2.00 (可変小数の例として) + 56 = 78. 78 はリストにありません => 78 はタグ付けされていません

3 番目のループ: ((fourth_id_number - first_id_number) * variable decimal) + second_id_number は id 列の数値に等しいか?

等...

タグ付けされたすべてのレコードを結果に表示したい。タグ付きレコードは、3 番目のレコードが式の結果である 3 つのレコードのセットです。

誰でもアイデアはありますか?mysqlで可能ですか?

ありがとうございました

4

2 に答える 2

0

最初の「ループ」を満たすこのようなものを潜在的に運ぶことができます

select a.id as first_id_number
    , b.id as second_id_number
    , ((b.id - a.id) * 2) + b.id as third_id_number
from my_table as a
    join my_table as b on a.id = (select max(id) from my_table where id < b.id)
where ((b.id - a.id) * 2) + b.id in (select id from my_table)

あなたの説明とテスト データによると、これは 65 を first_id_number 50 と 62 で「タグ付けされた」ものとして表示します。

警告:かなり標準的な構文と思われるものを使用して、SQL Server で実行されました。select max...これを、結合述語ではなく where 句のビットを使用したクロス結合と表現する人がいるかどうかは理解できます。

于 2012-05-31T17:18:38.677 に答える
0

あなたの要件を適切に理解している場合、テーブルで自己結合を使用したいようです。

SELECT ...
FROM yourtable AS parent
LEFT JOIN yourtable AS child ON
    FLOOR((parent.second_id_number - parent.first_id_number) * variable) + parent.second_id) = child.id
于 2012-05-31T17:04:26.973 に答える