0

列名が「id」、「time」、「value」のテーブルがあり、「value」がnullの場合、そのidの「time」列で最も近い隣人の平均になりたい

私の問題はまさにここで説明されているselectnearest neighborsですが、答えは、別の列に制限がある最近傍を見つける方法を説明していません (id は同じである必要があります)。

例: 2 行目に「値」がありません

id       | time  | value
-------------------------
11111    | 1     | 5.0
11111    | 10    | 
22222    | 7     | 32.6
33333    | 11    | 15.88
11111    | 15    | 20.0

そして私はそれが欲しい:

id       | time  | value
-------------------------
11111    | 1     | 5.0
11111    | 10    | 12.5*
22222    | 7     | 32.6
33333    | 11    | 15.88
11111    | 15    | 20.0

(20.0 + 5.0) / 2 = 12.5 として

MySQL でどのように取得できますか?

4

3 に答える 3

0

が順序を定義し、一意であると仮定するとtime(これには一意の列と順序を定義する列が必要です)、1 つの方法は、 と を使用して小さい (大きい) レコードの上部 (下部) を取得するサブクエリを使用することvalueです。timeORDER BYLIMIT

SELECT t1.id,
       t1.time,
       coalesce(t1.value,
                ((SELECT t2.value
                         FROM elbat t2
                         WHERE t2.id = t1.id
                               AND t2.time < t1.time
                         ORDER BY t2.time DESC
                         LIMIT 1)
                 +
                 (SELECT t2.value
                         FROM elbat t2
                         WHERE t2.id = t1.id
                               AND t2.time > t1.time
                         ORDER BY t2.time ASC
                         LIMIT 1)
                )
                /
                2) value
       FROM elbat t1;

デシベル<>フィドル

ただし、これは 1 行幅のギャップしか埋めることができません。より大きなギャップが存在する可能性がある場合は、これらの行の次の非 null ネイバーを定義する必要があります。

于 2019-03-30T19:01:51.477 に答える