2015-10-13 60 views
-1

我有一個表,這個是:SQL查詢來比較字段的值兩個不同的日期

Date Name Rating 
01-Dec-14 Ash A 
02-Dec-14 Ash A 
03-Dec-14 Ash AA 
04-Dec-14 Rob BB 
05-Dec-14 Rob BB 
06-Dec-14 Charly A 
07-Dec-14 Charly AA 

我只是寫一個SQL查詢這使我的日期/名/等級,其中等級有間變日期。更確切地說,我想知道在一段時間內哪些名字發生了評級變化。

謝謝了很多。

+0

我認爲我們必須保持對評級 – kannan

+0

歷史記錄表這將不與「簡單的SQL查詢」是可能的,因爲簡單的SQL無法在行之間進行比較。你需要光標或程序來做到這一點。 – dummy

回答

0

最簡單的方法就是使用枚舉變量行,然後彙總:

select name, rating, min(date) as firstdate, maxdate(lastdate) 
from (select t.*, 
      (@grp := if(@nr = concat_ws(':', name, rating), @grp, 
         if(@nr := concat_ws(':', name, rating), @grp + 1, @grp + 1) 
         ) 
      ) as grp 
     from table t cross join 
      (select @grp := 0, @nr := '') params 
     order by name, date 
    ) t 
group by name, grp, rating;