我有一個非常簡單的表格,如下所示
CREATE TABLE `tbl_data` (
`id` int(11) NOT NULL,
`won` tinyint(4) NOT NULL,
`time` datetime NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Dumping data for table `tbl_data`
--
INSERT INTO `tbl_data` (`id`, `won`, `time`) VALUES
(1, 1, '2022-10-18 05:21:37'),
(2, 2, '2022-10-18 05:21:37'),
(5, 0, '2022-10-18 05:22:02'),
(6, 2, '2022-10-18 05:22:02'),
(7, 2, '2022-10-18 05:22:18'),
(8, 1, '2022-10-18 05:22:18');
--
-- Indexes for dumped tables
--
--
-- Indexes for table `tbl_data`
--
ALTER TABLE `tbl_data`
ADD PRIMARY KEY (`id`);
--
-- AUTO_INCREMENT for dumped tables
--
--
-- AUTO_INCREMENT for table `tbl_data`
--
ALTER TABLE `tbl_data`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9;
COMMIT;
我想要實作的是選擇所有包含贏得模式的行,如 0,2,2,因此它將在上面的示例中選擇名為 5,6,7 的 ID。如果我的模式像 1,2 它應該像這樣選擇名為 1 和 2 的 ID。
資料庫小提琴在這里
https://www.db-fiddle.com/#&togetherjs=RDJuie555L
我正在尋找上一小時的解決方案,但無法實作目標。讓我知道這里是否有任何專家可以幫助我。
謝謝!
uj5u.com熱心網友回復:
WITH cte AS (
SELECT id id0,
LEAD(id) OVER w id1,
LEAD(id,2) OVER w id2,
CONCAT_WS(',',
won,
LEAD(won) OVER w,
LEAD(won,2) OVER w) won_list
FROM tbl_data
WINDOW w AS (ORDER BY id)
)
SELECT tbl_data.*
FROM tbl_data
JOIN cte ON tbl_data.id IN (cte.id0, cte.id1, cte.id2)
WHERE cte.won_list = '0,2,2'
| ID | 韓元 | 時間 |
|---|---|---|
| 5 | 0 | 2022-10-18 05:22:02 |
| 6 | 2 | 2022-10-18 05:22:02 |
| 7 | 2 | 2022-10-18 05:22:18 |
小提琴
PS。如果存在多個所需模式的副本,則行將混合。將ORDER BY id子句添加到外部查詢以將輸出行和cte.idN(N=0..2) 中的任何一個排序到其輸出串列以查看單獨的模式組。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/516977.html
標籤:mysql
