最近有專案要做,舊有的table記錄會員展期時間都在不同列
但是同時抓不同列的頭尾,要怎麼抓聽
前一間公司有做過切帳,但是…那時候切帳有頭尾分開
這次是連在一起
同尾跟上一個不連續代表有展期是分開的
就想想這張table有什麼方法可以做到
想了一連串方法
用union all把starttime和endtime欄位串起來
做count()
做數量加總
having過濾需要長度1的
代表
- 基數行是展期開頭
- 偶數行是展期結束
網路爬了一下MySQL要怎麼做Rank
[数据库与SQL] - No.5 MYSQL实现 RANK函数排序功能 - CSDN博客
MySQL 求名次的問題 - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天
接下來序列都做好了,
原本想用1,0,1,0來做續接的方法
但是都失敗了
不過最後想到一個方式串接
最近看「SQL語法範例辭典」P.516 Between ,一個資料表當做不同資料表
實例都還滿有趣的
這個跟上一間切帳有種同工之妙
最後可以在用user跟這張表用between串起來…
不過用這個東西SQL可能特別長….
where aa.rank+1 = bb.Rank AND aa.Rank%2 = 1;
aa.rank+1 = bb.rank
rank對2對3,我一直記錯
(2) + 1 = 3
把偶數行用消失,就rank % 2 = 1就好了
最後怕效能,所以在MySQL索引加入uid為index
但是竟然還是full scan這又是另外一個故事了XD
最後用join方式解決出問題(解法跟上次MySQL IN解決方法差不多)
有空再開筆記
1 | create table test_tb |
1 | -- query |