0

時間差を含むフィールドを持つテーブルがあります。行は時間的な順序であることが保証されています。つまり、ID 1 の行は、行 2 で表されるイベントの前に発生したイベントを表します。ここで、すべての行の絶対タイムスタンプを返すクエリを実行したいと考えています。

サンプルデータ:

id timestamp_delta
1  0
2  22
3  5
4  10

最初のエントリの絶対タイムスタンプを知っています。100 だとしましょう。したがって、クエリで作成したい結果のテーブルは次のようになります。

id timestamp_absolute
1  100
2  122
3  127
4  137

シンプルに見えますが、私はこのタスクにかなりこだわっています。

私ができることは、テーブルをfrom句に2回入れることで、行n-1のデルタを読み取ることです

select *
from badtable t1, badtable t2
where t2.id = t1.id-1

注文を信頼できるからです。しかし、私はここから行く方法がわかりません。どういうわけか、各行で値をインクリメントすることは可能ですか? すべての行の最初から合計を計算することにより、解決策が O(N2) ランタイム動作になる場合でも、それは許容されます。

このデータを保存する方法ではないと思います。デルタを使用することを選択した理由は、モバイル アプリから転送されるデータの量を削減するため (数パーセントの節約であっても、その価値がある) であり、サーバー DB にそのまま書き込むだけで便利です。

最善の解決策がどれほど単純か複雑かを知りたいです...

重要な場合は、MySQL DB です。

4

1 に答える 1

1

次のように自己結合でそれを行うことができます:(フリーハンド)

SELECT t1.id, SUM(t2.timestamp_delta) + 100
FROM badtable t1 JOIN badtable t2 ON t2.id <= t1.id 
GROUP BY t1.id
于 2013-06-21T19:34:11.417 に答える