2017-10-08 22 views
0

でグループを含む参加してselect文で集計機能、私は次の属性を持つ2つのテーブルがあります。SQL:句

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 

を私はのB/W最初の(最も古い)発生年月日の違いを見つけようとしていますそれぞれdomaint2であり、最初に発生したもの(dateに基づく)はt1です。

次のクエリは私に必要な結果与えている:私は(唯一の彼らの最初の出現のために)すべてのドメイン間での日付の差の平均値を計算したい場合は今、この部分は中にエラーが発生します

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

をselect文(クエリの残りは上記と同じです):

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

ここでエラー(グループ関数の無効な使用)を修正する方法はありますか?
また、平均日差グループをsourceで計算したいとします。このような出力は次のようにあるべきこと:ちょうど上記のよう

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

、与えられたソースで複数の同じドメインに対して、私は平均日差を計算するときに、それだけでソースの最も古いドメインの日付を考慮する必要があります。

答えて

2

使用サブクエリ:

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

おかげで、それが働きました。 2番目のクエリでは、サブクエリも提案しますか? – SaadH

+0

@Saadh。 。 。あなたは本当にそれぞれの質問で1つの質問をするだけです。私は構成が 'avg(datediff(t1.date、t2.date)')だと思います。 –