進行比較時,一種方法是將記錄一起比較到同一行中。由於您想比較「當前日期到下一天」的記錄,因此您可以將自己的表格加入日期中一天的差異。這是通過DATEDIFF
函數完成的,該函數計算兩個日期之間不同的天數。
查詢1:
select
today.*,
followingday.date as ndate, followingday.gr1 as ngr1,
followingday.gr2 as ngr2, followingday.gr3 as ngr3
from mytable today
join mytable followingday on DATEDIFF(followingday.date, today.date) = 1
這會給下面的結果,在連續一天的值與前一日合併(我用的n
前綴更名爲列從followingday
,使所有的列具有唯一的名稱,否則他們不會全部顯示在結果集):
結果(DEMO):
| DATE | GR1 | GR2 | GR3 | NDATE | NGR1 | NGR2 | NGR3 |
------------------------------------------------------------------------------------------------------------
| November, 30 2011 00:00:00+0000 | c | a | f | December, 01 2011 00:00:00+0000 | b | d | c |
| November, 29 2011 00:00:00+0000 | a | b | f | November, 30 2011 00:00:00+0000 | c | a | f |
| November, 28 2011 00:00:00+0000 | f | b | c | November, 29 2011 00:00:00+0000 | a | b | f |
| November, 27 2011 00:00:00+0000 | a | c | d | November, 28 2011 00:00:00+0000 | f | b | c |
| November, 26 2011 00:00:00+0000 | c | a | b | November, 27 2011 00:00:00+0000 | a | c | d |
既然結果組合成一行,我們就可以將一些邏輯應用到數據中。在這種情況下,規則是「任何欄值在第二天都有一個'a',後面跟着'f'等級,不管哪一欄有分數。」因此,任何的等級是一個a
在當天,隨後任何牌號翌日作爲一個f
的:
查詢2:
...
where (today.gr1 = 'a' or today.gr2 = 'a' or today.gr3 = 'a')
and (followingday.gr1 = 'f' or followingday.gr2 = 'f' or
followingday.gr3 = 'f')
結果(DEMO):
| DATE | GR1 | GR2 | GR3 | NDATE | NGR1 | NGR2 | NGR3 |
------------------------------------------------------------------------------------------------------------
| November, 29 2011 00:00:00+0000 | a | b | f | November, 30 2011 00:00:00+0000 | c | a | f |
| November, 27 2011 00:00:00+0000 | a | c | d | November, 28 2011 00:00:00+0000 | f | b | c |
結果表明,有的a
上11-27-11
一個檔次,其次在11-28-11
上的等級爲f
。同樣,在11-29-11
上有a
的等級,然後11-30-11
上的等級爲f
。這些應該是滿足規則的唯一結果。
你如何期待結果?你試過了什麼? –
這些數據庫將運行? –
使用MySQL ....所有我想要的是運行查詢,並讓它顯示4列。 –