----- -------
| id | status|
----- -------
| 01 | open |
| 02 | close |
| 03 | close |
| 04 | close |
| 05 | open |
| 06 | open |
| 07 | open |
| 08 | close |
| 09 | open |
| 10 | close |
----- -------
我的期望:
- 獲取多條記錄相同值相鄰值
- 例子:
| 地位 | 數字 |
|---|---|
| 打開 | 1 |
| 關 | 3 |
| 打開 | 3 |
| 關 | 1 |
| 打開 | 1 |
| 關 | 1 |
uj5u.com熱心網友回復:
這是一個差距和孤島問題,您可以使用兩個row_number函式之間的差異來為連續的相似“狀態”值定義唯一組,然后基于該組執行聚合。檢查以下內容:
select status, count(*) number
from
(
select *,
row_number() over (order by cast(id as signed)) -
row_number() over (partition by status order by cast(id as signed)) grp
from table_name
) T
group by status, grp
order by grp
查看演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/533258.html
標籤:mysqlsql
上一篇:如何在SQL中宣告或設定多個值?
