0
我需要選擇列中具有共同值的所有行(對於範圍)。選擇第n個行/列中哪些列具有共同值的島?
例如(從最後一行開始)
我儘量選擇所有行的其中_user_id == 1
直到_user_id != 1
?
在這種情況下產生選擇行[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
以我嘗試我使用Common Table Expressions到組的_user_id
結果。這給出了含有一個唯一的值的最後行的索引(例如SELECT _id FROM t1 GROUP BY _user_id LIMIT 2;
會產生:[6,3])
我然後使用這兩個值來選擇一個範圍,其中LIMIT 1 OFFSET 1
是下端(3)和LIMIT 1
是上端(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
這似乎在選擇最後的「孤島」,但我真的需要好的工作是一種選擇的第n個島嶼。
有沒有一種方法來生成時能夠提供的參數n
產生這樣的輸出的查詢:
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