1

TableA と呼ぶテーブルに次のデータがあります。

ID  Status     Date
5     0        1000
20    0         900
10    1         800
30    1         700
4     1         600
8     0         500
22    1         400
1     1         300
3     0         200

レコードは日付の降順でソートされます。Status が 1 に等しいレコードのみを取得したいが、Status が 1 でなくなった最初のレコードまでのみを取得したい。したがって、サンプル データでは、ID: 10,30,4 のレコードが選択されますが、22 と1 は、ID 8 が表示され、セットを分離するためではありません。できれば、SQL は Sqlite で実行する必要があります。このサンプル データの結果は次のようになります。

ID  Status     Date
10     1       800
30     1       700
4      1       600

EDIT ID 値をランダムな値に置き換え、日付を TEXT から Integer に変更しました。

4

3 に答える 3

2

私は提案します

select * from tableA a1 where a1.status = 1 and not exists
(select 1 from tableA a2 where a2.status = 0 and a2.date > a1.date and a2.date <
(select max(date) from tableA a3 where a3.status = 1
)
)

二重にネストされたサブクエリ。ステータスが 1 で、その前に行がない行を選択します (ステータスが 0 で、ステータスが 1 の最も古い行の後にあります)。

これがどれほど効率的かはわかりません。

于 2013-06-14T05:56:05.263 に答える
-1

これはテストされていませんが、アイデアが得られます。

これは MSSQL 用で、サブクエリを使用します。それがsqliteで機能するかどうかはわかりません。

select RowNumber() r, *
from (select * from TableA where status = 1), (select top 1 id from TableA where status = 1) diff
where id - r = diff - 1
于 2013-06-14T06:02:21.093 に答える