2012-01-18 10 views
0

次のデータセットでは、PARENT + CHILD + COUNTの組み合わせを選択しようとしています。最大。私はGROUP BYがこれを得る正しい方法だと仮定していますが、私は運がなかったのです。何かご意見は?SQL:GROUP BY(または他の?)を使用して一意のPARENT + CHILD + MAX(CREATED_DT)レコードのCOUNTを選択するヘルプ

PARENT CHILD COUNT CREATED_DT  

PARENT1 CHILD1 100 01/17/2012 
PARENT1 CHILD1 200 01/16/2012 
PARENT1 CHILD2 300 01/14/2012 
PARENT1 CHILD2 400 01/15/2012 

所望の結果セットは、レコード1および4である - すなわち、親1 + CHILD1 + 100(> 1/16 1/17)、および親1 + CHILD2 + 400(> 1/14 1/15) 。

私が行う場合:

SELECT PARENT, CHILD, COUNT, MAX(CREATED_DT) FROM TABLE 
GROUP BY PARENT, CHILD, COUNT 

COUNTが異なるため...そして、それはまだすべての4行を選択します。私がしようとした場合:

SELECT PARENT, CHILD, MAX(CREATED_DT) FROM TABLE 
GROUP BY PARENT, CHILD 

...その後、私は戻って、私が今欠けているCOUNTを取得する方法がわかりませんよ。

思考?

答えて

1

助けてもらえますか?

SELECT [PARENT], 
     [CHILD], 
     [COUNT], 
     [CREATED_DT] 
FROM (SELECT [PARENT], 
       [CHILD], 
       [COUNT], 
       [CREATED_DT], 
       Row_number() OVER (PARTITION BY [PARENT], [CHILD] ORDER BY 
       created_dt desc) 
         AS 
       'GroupId' 
     FROM t) a 
WHERE GroupId = 1 
+0

これは完璧です。私は、PARTITION BYを使用して集約なしでGROUP BYに似たことをすることはできないと考えていませんでした。ありがとうございました! – Mark

2

このようにしますか?

SELECT 
t1.PARENT 
, t1.CHILD 
, t1.COUNT 
, t1.CREATED_DT 
FROM TABLE t1 
WHERE 
t1.CREATED_DT = (SELECT MAX(t2.CREATED_DT) 
       FROM TABLE t2 
       WHERE t1.PARENT = t2.PARENT 
       AND t1.CHILD = t2.CHILD) 
+1

+1これはグループごとに2つ以上の結果を返すことができることに注意してください(OPでは言及しませんでした)。 – harpo

+0

私はグループごとに1つの結果しか必要としなかったという事実を言い訳しました。だから、この特定のユースケースのためのよりよい解決策として、実際にはPARTITION BYが終了すると思います。それにもかかわらず、ありがとう。 – Mark

関連する問題