2016-05-18 4 views
2

私は他の投稿のアドバイスを使ってグループの各メンバーの最大値を見つけようとしていますが、これはカウンタが特定の列ではなくカウント(*)に基づいているためです。計算がカウント(*)で完了したら、各グループの最大値を見つけるにはどうすればよいですか?

テーブルには複数の列があります。私が必要とするもの:日付と枝。表の各レコードは、そのブランチ内のトランザクションを表します。私は、より多くのトランザクションを持つブランチである各日付と、それらが何回行われたかを知る必要があります。

私が始めた:私は最大(合計)を試みたが、これは私だけの行の代わりに、グループごとに1つを与えるだろう

Select date, branch, count(*) as total 
from table 
group by date, branch 

格言を持つ句で認識されていないので、私は、自分自身で結ぶこのような何かを試してみましたが、それdoesn't作品:

Select date, branch, count(*) as maxim 
(Select date, branch, count(*) as total 
from table 
group by date, branch) a 
having maxim=max(total) 
group by date, branch 

任意のアイデアを?,感謝を!

+0

グループによって行う必要があります。あなたの例では注意してください、あなたはcount(*)をmax(合計)ではなく、これをちょうど入力ミスだと思います。 – AxelH

答えて

0

これを試してみてください:

select t1.date, t2.branch, t1.max_total 
from (
    select date, max(total) as max_total 
    from (
    select date, branch, count(*) as total 
    from mytable 
    group by date, branch) as x 
    group by date  
) as t1  
join (
    select date, branch, count(*) as total 
    from mytable 
    group by date, branch 
) as t2 on t1.date = t2.date and t1.max_total = t2.total 

考え方は、派生テーブルとして二回あなたが開始したクエリを使用することです:

  • あなたがあたりの最大数を得るためにそれを使用する最初の時間date
  • totalの最大数に等しい数のbranchの値を抽出するために2回目に使用します。同調の場合、複数の支店が存在することがあります。

Demo here

DB2は、ウィンドウ関数をサポートしている場合は、以下を使用することができ、これは、該当する場合、より効率的である:

select date, branch, total 
from (
    select date, branch, count(*) as total, 
     rank() over (partition by date order by count(*) desc) as rn 
    from mytable 
    group by date, branch) as t 
where t.rn = 1 
+0

ありがとう!これは役に立ちました – NatBI

+0

@NatBI Glad私はスタックオーバーフローを助けることができました。あなたの問題を解決するのに役立ちましたら、これを記入してください。 –

0

以下のコードを試してみてください。

DECLARE @table TABLE 
    ([Date] date,Branch varchar(10),trans int) 

INSERT INTO @table 
    (
     [Date], 
     Branch, 
     trans 
    ) 
    VALUES 
    ('2015-01-01','b1',1),('2015-01-01','b1',2),('2015-01-01','b1',3), 
    ('2015-01-02','b1',4),('2015-01-02','b1',5),('2015-01-02','b1',6), 
    ('2015-01-01','b2',1),('2015-01-01','b2',2),('2015-01-01','b2',3) 

Select 
    [Date], Branch, COUNT(trans) AS total 
FROM 
    @table 
GROUP By 
    [Date], Branch 
    ORDER BY [Date] 
関連する問題