7

さまざまな製品の価格を含む SQLite テーブルがありますこれはスナップショット テーブルであるため、5 分間隔の価格が含まれています。各商品の行ごとの価格差を返すクエリを書きたいと思います。

列は id (auto inc)、record_id (製品の id)、price (その時点での価格)、time (エポックからわずか数秒) です。

間隔間の差の値を含む「差」列を返そうとしています。

以下を考えると

id record_id 価格 時間
1 りんご001 36.00 ...
67 りんご001 37.87 ...
765 りんご001 45.82 ...
892 りんご001 26.76 ...

返してほしい
id record_id 価格 時差
1 りんご001 36.00 ... 0
67 りんご001 37.87 ... 1.87
765 りんご001 45.82 ... 7.95
892 りんご001 26.76 ... -19.06

SQLiteで可能ですか?

第二に、それが可能である必要があります-それを最後の5レコード程度に制限する方法はありますか?

助けていただければ幸いです、ありがとう。


いくつか追加したかっただけです。他のデータベースでこれを行う方法を見つけましたが、私は XULRunner を使用しているため、SQLite を使用しています。それが私が代わりにそれを使っている理由です。

2 番目の質問は明確にする必要があるかもしれません。時間までに注文し、最後の 5 つのレコードを取得して分析したいと考えています。必要に応じて個別に取り組むことができる問題です。

これがMySQLソリューションです。それは私が目指しているアプローチですが、取引のブレーカーは「テーブルにシーケンス列が含まれているがギャップがある場合は、番号を付け直します。テーブルにそのような列が含まれていない場合は、1つ追加します」. 設計上、このシナリオにはギャップがあり、一度に多数のレコードが更新され、順序が正しくないためです。

4

2 に答える 2

9

SQLite にいくつかの制限があるかどうかはわかりませんが、Sql Server で動作している次のステートメントを試すことができます。

時差が一定の場合 (5 分であると述べている場合)、次のように記述できます。

SELECT A.id, A.record_id, A.price, A.time, ISNULL(A.price - B.price, 0) AS difference
FROM Table1 as A 
    LEFT OUTER JOIN Table1 B ON A.record_id = B.record_id AND A.time - B.time = 5

それ以外は

SELECT A.id, A.record_id, A.price, A.time, ISNULL(A.price - B.price, 0) AS difference
FROM Table1 as A 
    LEFT OUTER JOIN Table1 B ON B.record_id = A.record_id 
         AND B.time = (SELECT MAX(time) FROM Table1 C WHERE C.time < A.time AND C.record_id = A.record_id)

結合のないステートメントは次のとおりです

SELECT id, record_id, price, time,
    (SELECT A.price - B.price
        FROM Table1 as B
        WHERE B.record_id = A.record_id AND
            B.time = (SELECT MAX(time) FROM Table1 C WHERE C.time < A.time AND C.record_id = A.record_id)) AS difference
FROM Table1 as A 

それらの1つがあなたを助けることを願っています。

于 2008-10-25T11:58:20.450 に答える