今天在論壇上看到乙個帖子,我覺得挺有意思,帖子如下:
雖說我現在在mysql方面能力有限,但也想嘗試一把,想把它搞出來,經過我的不懈努力,算是有個結果了,可以給自己乙個交代了,
鑑於目前的我是個mysql菜鳥,看著回帖子的都是版主,大拿級人物,沒敢和人家平起平坐,所以我沒把自己的小小成果以帖子的形式回給人家,還是放到自己小窩裡供大家和自己分享吧
以下為我做的實驗步驟:
mysql> create table test(id varchar(10));
query ok, 0 rows affected (0.04 sec)
mysql> insert into test(id) values('a');
query ok, 1 row affected (0.00 sec)
mysql> insert into test(id) values('b');
query ok, 1 row affected (0.00 sec)
mysql> insert into test(id) values('c');
query ok, 1 row affected (0.00 sec)
mysql> insert into test(id) values('a');
query ok, 1 row affected (0.00 sec)
mysql> insert into test(id) values('d');
query ok, 1 row affected (0.00 sec)
mysql> insert into test(id) values('e');
query ok, 1 row affected (0.00 sec)
mysql> insert into test(id) values('f');
query ok, 1 row affected (0.00 sec)
.
..
mysql> insert into test(id) values('o');
query ok, 1 row affected (0.00 sec)
mysql> insert into test(id) values('a');
query ok, 1 row affected (0.00 sec)
mysql> select * from test;
+------+
| id |
+------+
| a |
| b |
| c |
| a |
| d |
| e |
| f |
| a |
| g |
| h |
| i |
| a |
| j |
| k |
| l |
| m |
| n |
| o |
| a |
+------+
19 rows in set (0.00 sec)
mysql> set @rownum=0; --初始化變數rownum,初始值為0
query ok, 0 rows affected (0.00 sec)
mysql> set @rownum1=0; --初始化變數rownum1,初始值為0
query ok, 0 rows affected (0.00 sec)
--查詢表中重覆記錄a的各個間隔
mysql> select c.rownum,c.id,min(c.rownum-d.rownum)-1 from (select b.rownum,b.id from (select @rownum:=@rownum+1 as rownum,id from test) b where b.id='a') c
-> inner join (select e.rownum,e.id from (select @rownum1:=@rownum1+1 as rownum,id from test) e where e.id='a') d on (c.rownum>d.rownum)
-> group by c.rownum,c.id;
+--------+------+--------------------------+
| rownum | id | min(c.rownum-d.rownum)-1 |
+--------+------+--------------------------+
| 4 | a | 2 |
| 8 | a | 3 |
| 12 | a | 3 |
| 19 | a | 6 |
+--------+------+--------------------------+
4 rows in set (0.00 sec)
--查詢表中重覆記錄a的最大間隔
mysql> select max(f.z) from (select min(c.rownum-d.rownum)-1 z from (select b.rownum,b.id from (select @rownum:=@rownum+1 as rownum,id from test) b where b.id='a') c
-> inner join (select e.rownum,e.id from (select @rownum1:=@rownum1+1 as rownum,id from test) e where e.id='a') d on (c.rownum>d.rownum)
-> group by c.rownum,c.id) f;
+----------+
| max(f.z) |
+----------+
| 6 |
+----------+
1 row in set (0.00 sec)
mysql>
解釋說明:
要是只是按帖子中說的乙個字段,無法取得重覆記錄之間的間隔,同時也就不能求出最大間隔
所以,需要構造乙個虛擬列(rownum),用這列記錄表中記錄的行號。
設定兩個臨時變數,初始值設定為0: set @rownum=0; 以及 set @rownum1=0;
讓@rownum自加1並賦值給自己作為行號
min(c.rownum-d.rownum) 為的是讓相鄰兩個重複值之間相減
min(c.rownum-d.rownum)-1 取得間隔
max(f.z) 取得最大間隔
語句看起來挺複雜,其實就是做了個自連線
mysql刪除表中重複值
工作中遇到這麼個需求,有個 eh 表沒有唯一索引,當表中有一大堆資料後,又需要建個唯一索引,而這個表中還很多重複值,問我咋辦?一句話形容就是 表中重複值太多,如何去重。舉個白痴例子 1.建表a create table a id int,name char 10 2.插入資料 id name 1 a...
陣列中重複的值
找出陣列中重複的數字。在乙個長度為 n 的陣列 nums 裡的所有數字都在 0 n 1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。示例 1 輸入 2,3,1,0,2,5,3 輸出 2 或 3 限制 2 n 100000 下...
如何在ng if中取得ng model的值
來北京工作快乙個月了吧,專案是我感興趣的angular框架的,遇到和解決了一些坑。今個遇到的都是定義域的問題,首先是directive復用,scope衝突,需要配置scope引數,然後就是ng if會開闢一塊定義域 這也是ng if與ng show的一大區別 話不多說,上 一看便知。如何在ng if...