1

私のテーブルには 3 つの列[ID], [YEAR], [MALES]があり、特定の ID に対して複数の YEAR 値に対して複数の MALES 値が存在する可能性があります。

元。

[ID]     [YEAR]     [MALES]
1        2010       10
1        2011       20
1        2011       35
1        2011       0
1        2012       25
1        2012       10
2        2010       5
2        2011       2
2        2011       11
2        2011       12
2        2012       0
2        2012       10

ID ごとに YEAR の最大値とその YEAR の MALES の最大値を照会する必要があります。したがって、上記の例の結果は次のようになります。

[ID]     [YEAR]     [MALES]
1        2012       25
2        2012       10
4

4 に答える 4

2

これを行うには、次を使用しrow_number()ます。

select id, year, males
from (select t.*,
             row_number() over (partition by id
                                order by years desc, males desc
                               ) as seqnum
      from t
     ) t
where seqnum = 1;
于 2013-08-01T18:02:48.717 に答える
0
;with CTE as
(
    select
        *,
        row_number() over (partition by ID order by year desc, males desc) as row_num
    from table
)
select *
from CTE
where row_num = 1

また

;with CTE as
(
    select ID, max(Year) as Year
    from table
    group by ID
)
select t.ID, t.Year, max(males) as males
from table as t
    inner join CTE as c on c.ID = t.ID and c.Year = t.Year
group by t.ID, t.year
于 2013-08-01T18:00:21.500 に答える