-1

どのように質問すればよいかよくわからないので、例から始めます。データベースに次のようなテーブルがあるとします。

id | time | event | pnumber
---------------------------
1  | 1200 | foo   | 23
2  | 1130 | bar   | 52
3  | 1045 | bat   | 13
...
n  | 0    | baz   | 7

ここで、特定の時間後に最後の既知の pnumber を取得したいとします。たとえば、時間 = 1135 の場合、テーブルにある最後の既知の時間 (1130) を見つけて、その pnumber を返す必要があります。したがって、t = 1130 の場合、pnumber = 52 が返されます。しかし、t = 1045 になるとすぐに、pnumber = 13 が返されます (このコンテキストでは、時間は 1200 から 0 までカウントダウンされます)。

これが私がこれまでに持っているものです。

SELECT pnumber FROM table WHERE time = (SELECT time FROM table WHERE time <= '1135' ORDER BY time LIMIT 1)

これを行う簡単な方法はありますか?複数のステートメントを使用せずに。私はsqlite3を使用しています

4

3 に答える 3

2

もちろん。次のようにして、そのクエリを要約できます。

SELECT pnumber FROM table WHERE time >= 1135 ORDER BY time DESC LIMIT 1;

最初に特定の時間を取得するために選択をネストする必要はありません。これは機能するはずです。

編集:不等号が混ざっています-特定の時間の後に最初のレコードを探している場合はtime >= 1135、制限が1の時間で降順で並べ替える必要があります。

于 2013-07-18T20:06:54.820 に答える