2015-05-16 32 views
3

是否有任何SQL代碼來檢查存儲在指定列中的值是按照升序還是降序排列?檢查列的升序

例如,我想檢查此表中列c中的升序。

enter image description here

回答

5

沒有,是不是這個特定的語法。最簡單的方法可能是獲得之前的值,然後檢查。下面是一個使用相關子查詢的一種方法:

select name, 
     (case when sum(c_prev > c) = 0 then 'All Ascending' 
      else 'Oops' 
     end) 
from (select t.*, 
      (select t2.c 
       from thistable t2 
       where t2.name = t.name and t2.year < t.year 
       order by t2.year desc 
       limit 1 
      ) as c_prev 
     from thistable t 
    ) t 
group by name; 

下面是另一種方法:

select t.name, 
     (case when group_concat(c order by c) = group_concat(c order by year) 
      then 'All Ascending' 
      else 'Oops' 
     end) 
from thistable t 
group by t.name; 

這是它如何處理相等的值稍有不同。此外,這受到group_concat()結果長度上的字符串長度限制(可以通過更改參數使用該長度進行覆蓋)。但是,爲了某些目的,這可能會很方便。