2016-11-12 21 views
0

內重複的記錄我有DB結構類似:MySQL的 - 如何找到時間

id ip  status time 
---------------------------------------- 
1 1.1.1.1 1  2016-11-11 21:37:04 
2 8.8.8.8 1  2016-11-11 22:37:04 
3 1.1.1.1 1  2016-11-11 21:38:04 
4 8.8.8.8 0  2016-11-11 22:38:04 
5 1.1.1.1 1  2016-11-11 21:39:04 
6 8.8.8.8 0  2016-11-11 21:39:04 
7 1.1.1.1 1  2016-11-11 21:40:04 
8 8.8.8.8 1  2016-11-11 21:40:04 
9 1.1.1.1 1  2016-11-11 21:41:04 
10 8.8.8.8 1  2016-11-11 21:41:04 
11 1.1.1.1 1  2016-11-11 21:42:04 
12 8.8.8.8 0  2016-11-11 21:42:04 
13 1.1.1.1 1  2016-11-11 21:43:04 
14 8.8.8.8 1  2016-11-11 21:43:04 

如何算有狀態0和它們之間的區別是1分鐘的記錄?他們必須彼此接踵而至。

從另一個角度來說,如果我們有任何數量的記錄,它們之間的狀態爲0,並且時間戳差異爲1分鐘或更長,那麼將其添加到計數中。

這會導致這樣的事情:

ip  time     count 
------------------------------------ 
8.8.8.8 2016-11-11 22:38:04 1 

的Sql撥弄其中一個答案來測試:

http://www.sqlfiddle.com/#!2/b88d5d/1

感謝。

+0

是不是計數 '2'? ?!? – Strawberry

+0

nop計數1,因爲當我們發現2個狀態0彼此之後發生了1次發生 –

+0

如果我們發現3個記錄在彼此之後的狀態爲0,那麼計數應該是2,如果發現4則計數應該是3 aka 3分鐘 –

回答

-1

選擇IP,DT,計數(ID),如從ip_check CNT其中 TIMESTAMPDIFF(MINUTE,DT,NOW())> 1且status = O基團通過腹膜

+0

相當接近,但這並不嚴格2狀態爲0的記錄,如果只有1條狀態爲0的記錄,它也會計數。 同樣,如果它發現多個結果與該查詢,它應該創建多個記錄。 http://www.sqlfiddle.com/#!2/b88d5d/1 –

+0

在我提供的例子中,它應該顯示2個結果,每個ip的count爲1,因爲每個ip都發生0 - 0如果發生3次like 0-0-0應該算2 –