2012-09-12 82 views
1

我在oracle中有這樣的查詢,通過UUID字段生成一個count爲1,42的子字符串。這是因爲我們在UUID之後追加了額外的字符來表示來自同一個UUID的多個操作。此查詢工作正常,問題是,UUID字段也具有17個字符長的android設備ID,而不是UUID具有的42個字符。我怎麼能包含這些不是標準42個字符的「UUID」?SQL - 包含多個子字符串?

select substr(uuid,1,42), count(player_id) 
From Play 
Where Trunc(Create_Dtime) >= To_Date('2012-mar-01','yyyy-mon-dd') 
Group By Substr(Uuid,1,42) 
Having Count(*) > 5 
Order By Count(Player_Id) Desc 
+0

這聽起來像是在數據模型中的缺陷分化的Android行。你不應該「追加」字符到一個唯一的ID。保持「行動」和id分開,你的查詢很容易。 – Ben

回答

1

如果你能以某種方式從其他的

select 
    case when <android-condition> then Substr(Uuid,1,17) 
     else Substr(uuid,1,42) 
    end 
    , count(player_id) 
From Play 
Where Trunc(Create_Dtime) >= To_Date('2012-mar-01','yyyy-mon-dd') 
Group By 
    case when <android-condition> then Substr(Uuid,1,17) 
     else Substr(uuid,1,42) 
    end 
Having Count(*) > 5 
Order By Count(Player_Id) Desc