0
列内で共通の値を持つすべての行(範囲に対して)を選択する必要があります。例えば列の共通の値を持つn番目の範囲/行の島を選択しますか?
(最後の行から開始)
私は_user_id != 1
まで_user_id == 1
のすべての行を選択しようか?
_user_id
の結果グループに
Common Table Expressionsを使用する私の試みで 行を選択する際に得られる。この場合
[4、5、6]
+------------------------+
| _id _user_id amount |
+------------------------+
| 1 1 777 |
| 2 2 1 |
| 3 2 11 |
| 4 1 10 |
| 5 1 100 |
| 6 1 101 |
+------------------------+
/*Create the table*/
CREATE TABLE IF NOT EXISTS t1 (
_id INTEGER PRIMARY KEY AUTOINCREMENT,
_user_id INTEGER,
amount INTEGER);
/*Add the datas*/
INSERT INTO t1 VALUES(1, 1, 777);
INSERT INTO t1 VALUES(2, 2, 1);
INSERT INTO t1 VALUES(3, 2, 11);
INSERT INTO t1 VALUES(4, 1, 10);
INSERT INTO t1 VALUES(5, 1, 100);
INSERT INTO t1 VALUES(6, 1, 101);
/*Check the datas*/
SELECT * FROM t1;
1|1|777
2|2|1
3|2|11
4|1|10
5|1|100
6|1|101
。これは、一意の値を含む最後の行のインデックスが得られる(例えばSELECT _id FROM t1 GROUP BY _user_id LIMIT 2;
が生成されます。[6,3])
それからLIMIT 1 OFFSET 1
下端(3)とLIMIT 1
範囲を選択するために、これら2つの値を使用します上端が(6)
WITH test AS (
SELECT _id FROM t1 GROUP BY _user_id LIMIT 2
) SELECT * FROM t1 WHERE _id BETWEEN 1+ (
SELECT * FROM test LIMIT 1 OFFSET 1
) and (
SELECT * FROM test LIMIT 1
);
出力です:
4|1|10
5|1|100
6|1|101
これが最後の「島」を選択でOK動作しているように見えますが、私が本当に必要なのはn番目の島を選択する方法であります。
パラメータn
を提供するときに、これらのような出力を生成することが可能なクエリを生成する方法はありますか?A:
island (n=1):
4|1|10
5|1|100
6|1|101
island (n=2):
2|2|1
3|2|11
island (n=3):
1|1|777
ありがとう!
がこれを供給するためのありがとう!私はしかし、私は行を削除する場合、それはもはや連続していない主キーのために前の行で停止するいくつかの問題を抱えています。何かご意見は? – Logic1
⁎grumble⁎元の質問に尋ねられたものではありません... –
早く言及してくれて申し訳ありません。それにもかかわらず、私はエントリを削除し、PKが連続していることを保証する方法をよりよく管理することで、その周りに道を見いだしました(それでも将来は問題になる可能性があります)。しかし、あなたの答えは大変ありがとうございました。とても役に立ちました! – Logic1