2012-09-12 2 views
1

J'ai cette requête dans Oracle qui produit un compte, par le champ UUID, avec une sous-chaîne de 1,42 ..Ceci était parce que nous ajoutons des caractères supplémentaires après l'UUID pour représenter plusieurs actions du même UUID. Cette requête fonctionne bien, le problème est, le champ UUID a aussi des ID de périphériques Android qui ont 17 caractères de long, pas les 42 caractères que possède un UUID. Comment pourrais-je inclure ces "UUID" qui ne sont pas les 42 caractères standard?SQL - Inclure plusieurs sous-chaînes?

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

Cela ressemble à une faille dans votre modèle de données. Vous ne devez pas "ajouter" des caractères à un identifiant unique. Gardez les "actions" et l'identifiant séparés et votre requête est facile. – Ben

Répondre

1

Si vous pouvez en quelque sorte différencier les lignes Android d'autres

les
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 
Questions connexes