2017-10-08 18 views
0

J'ai deux tables avec des attributs suivants:SQL: fonction d'agrégation dans l'instruction select avec une jointure impliquant clause group by

t1        t2 
source domain  date   rank  domain  date 
---  ---  ---   ---  ---  --- 
A  google 2008-10-24  1  google 2007-10-20 
A  facebook 2010-05-17  1  google 2009-02-21 
B  google 2007-05-14  2  facebook 2008-04-13 
B  google 2012-01-05  2  facebook 2012-09-12 
B  facebook 2014-03-23  2  facebook 2015-04-01 

Je suis en train de trouver la différence de date b/w la première occurrence (au plus tôt) de chaque domain dans t2 avec leur première occurrence (basée sur) dans t1.

La requête suivante me donne le résultat requis:

select t2.domain, datediff(min(t1.date),min(t2.date)) 
from t1 join t2 
on t1.domain = t2.domain 
group by t2.domain 

Maintenant, si je veux calculer la moyenne de la date différence dans tous les domaines (uniquement pour leur première occurrence), cette partie donne une erreur instruction select (le reste de la requête est comme ci-dessus):

select avg(datediff(min(t1.date),min(t2.date))) ...

Toute idée comment corriger l'erreur (utilisation incorrecte de la fonction de groupe) ici?
En outre, je veux calculer le groupe de différence de date moyenne par source. Telle que la sortie devrait être comme:

source  avg_datediff 
---  --- 
A   some_value 
B   some_value 

Tout comme ci-dessus, pour plusieurs mêmes domaines dans une source donnée, je dois considérer la date du domaine plus tôt pour cette source que, lors du calcul de différence de date avg.

Répondre

2

Utilisez un sous-requête:

select avg(days) 
from (select t2.domain, datediff(min(t1.date), min(t2.date)) as days 
     from t1 join 
      t2 
      on t1.domain = t2.domain 
     group by t2.domain 
    ) tt; 
+0

Merci, ça a marché. Pour ma deuxième requête, suggérez-vous également une sous-requête? – SaadH

+0

@Saadh. . . Vous devriez vraiment seulement poser une question dans chaque question. Je pense que la construction est 'avg (datediff (t1.date, t2.date)'. –