0
我有一組記錄,並且我想要獲取同一類型的兩個記錄之間的記錄集。MySQL:根據分隔符類型選擇一個有序記錄範圍
考慮這個樣本數據:
ID POSITION TYPE
9 1 separator
7 2 one
8 3 three
5 4 one
2 5 separator
4 6 two
3 7 two
6 8 separator
1 9 four
11 10 five
10 11 three
12 12 five
我想從一個特定的分離器到下一個分離器或記錄集的結尾得到了記錄。
案件:
- 創紀錄的2起,我就期望得到記錄4和3
- 創紀錄的6起,我就期望得到記錄1,11,10和12 。
我可以解決案例1有一個子查詢,像這樣:
SELECT *
FROM table_name
WHERE position > 5
AND position < (
SELECT MIN(position)
FROM table_name
WHERE position > 5
AND type = 'separator'
)
ORDER BY position ASC
該解決方案將不適用於案例2,並且似乎應該有一種方法,不使用子查詢。
SOLUTION
我的解決方案是基於喬治的回答,和作品,但我擔心它的潛力,因爲聚結功能和子查詢的缺乏表現力。
SELECT *
FROM table_name
WHERE `position` > 5
AND `position` < COALESCE(
(SELECT MIN(`position`)
FROM table_name
WHERE `position` > 5
AND `type` = 'separator'),
(SELECT MAX(`position`) + 1
FROM table_name))
ORDER BY `position` ASC
這看起來很乍看,但它沒有處理第二種情況。 – Sonny
你說得對,我只是編輯了答案。我猜它現在會起作用。 – wisefish
它現在適用於第二種情況,但不是第一種情況。如果你在下面加入我的答案,我會刪除我的答案並接受你的答案。 – Sonny