1

私はこのようなテーブルを持っています(これはレコードのほんの一部であり、それらもより多くの列ですが、これらは私が気にかけているものです):

nbr    amt     date     
1      10      10/30/2012
1      15      1/30/2012
1      50      11/30/2012
2      10      4/30/2012
2      1000    5/30/2012
2      45      1/15/2012
4      90      12/30/2012
4      89      8/30/2012
3      100     7/30/2012

SQL Server 2012 を使用して、各 nbr の max(amt) に対応する nbr、amt、および date を選択しようとしています。

これまでのところ、nbr でグループ化して max(amt) を選択するこのようなクエリがありますが、集計関数ではないため日付を選択できませんが、集計関数に入れると max(date) が選択されます。これは、金額に付随する実際の日付に対応していません。

,topamt as (
select 
                 nbr
    ,amt
    ,date
,amtrank = row_number() over (partition by ah.member_nbr order by ah.tran_amt desc)

from HISTORY ah 
      amt>=10
and id=6061
and date between '11-01-2012' and '12-31-2012'

したがって、クエリをこれに変更すると、max(amt) を取得するように定義している場所で、結果に少なくとも最大値が表示されません。

4

1 に答える 1

4

ランキング関数を使用してみてください。

with TopAmt as
(
  select *
  , amtRank = row_number() over (partition by nbr order by amt desc)
)
select nbr
  , amt
  , date
from TopAmt
where amtRank = 1
于 2013-01-08T19:56:19.623 に答える