2016-08-08 10 views
0

BY GROUPからグラブ一番上の行:Complex Grouping in SQL Query ...私の最後の質問のオフに行く

各グループでは、私は最高の「ステップ」の値で行のみを取得したいと思います。

SELECT a.*, b.* 
FROM (
    SELECT request_id 
    FROM tableA 
    GROUP BY request_id 
    HAVING MAX(page_views) <= 0 AND MAX(step) <= 2 
) AS sumQ 
INNER JOIN tableA AS a ON sumQ.request_id = a.request_id 
INNER JOIN tableB AS b ON a.request_id = b.id 

返します:

これは、我々は最後の質問に思い付いたクエリがある

id request_id page_views step name   phone 
---------------------------------------------------------------- 
8 3   0   0  Jacob Clark 434-343-434 
9 3   0   1  Jacob Clark 434-343-434 
10 4   0   0  Alex Smith 222-112-2112 
11 4   0   1  Alex Smith 222-112-2112 
12 4   0   2  Alex Smith 222-112-2112 

私が欲しかったものである、しかし、私が実現し、各グループ内(グループそのby request_id)私は、最も高い「ステップ」値を持つ行のみが必要です。既存のクエリを修正するにはどうすればいいですか?

id request_id page_views step name   phone 
---------------------------------------------------------------- 
9 3   0   1  Jacob Clark 434-343-434 
12 4   0   2  Alex Smith 222-112-2112 

答えて

0

は、次にロジックでstepを含める:

SELECT a.*, b.* 
FROM (SELECT request_id, MAX(step) as maxstep 
     FROM tableA 
     GROUP BY request_id 
     HAVING MAX(page_views) <= 0 AND MAX(step) <= 2 
    ) sumQ INNER JOIN 
    tableA a 
    ON sumQ.request_id = a.request_id AND 
     sumQ.maxstep = a.step INNER JOIN 
    tableB b 
    ON a.request_id = b.id; 
+0

カイルは、この答えで注意するべきことは一つだが、同じMAX(ステップ)を共有するrequest_idを1つ以上のレコードとすると、1つ以上のレコードが取得されるということを意味する。あなたが無作為に選んだ1つだけを選択したいのであれば、ゴードンが確かに知っていると確信しているrownumberを使用する必要があります。それがあなたが望むものなら確かに – Matt

+0

ありがとうMatt。グループごとに同じrequest_idを持つ複数の行がある場合は、実際には問題ありません。 –

-1

あなたはstepフィールド上ORDER BYを設定しようとしたし、その後TOP記録を取ることがありますか?

SELECT a.*, b.* 
FROM (
    SELECT TOP 1 request_id 
     FROM tableA 
     GROUP BY request_id 
     HAVING MAX(page_views) <= 0 AND MAX(step) <= 2 
     ORDER BY step DESC 
) AS sumQ 
INNER JOIN tableA AS a ON sumQ.request_id = a.request_id 
INNER JOIN tableB AS b ON a.request_id = b.id 
+0

これはOP 1のrequest_idだけを与えますが、彼は各request_idの先頭のレコードを求めています。 – Matt

+0

マットが正しいです。これは私が望んでいたものを私に与えることはありません。 –