2013-06-21 3 views
0

У меня есть требование напечатать соответствующий наивысший год и самую высокую четверть для данного столбца.Нужно печатать самый высокий год и их самый высокий квартал в SQL Server 2012

ввода находится в таблице:

cityprogram   year   quarter 
===========   ====   ======= 
Abc     1998    1 
Abc     1999    4 
Abc     1999    4 
Abc     1998    3 
xyz     1998    4 
xyz     1998    1 
xyz     2000    3 

Он должен печатать

Abc     1999    4 
xyz     2000    3 

Я пытался много соединений, не более условия, я, кажется, чтобы получить четверть 4 и 4 для обоих из них :(спасибо

ответ

2

Используйте window function как ROW_NUMBER в общем-табличного-выражение:

WITH CTE AS(
    SELECT [cityprogram], [year], [quarter], 
      RN = ROW_NUMBER() OVER (
        PARTITION BY [cityprogram] 
        ORDER BY [year] DESC, [quarter] DESC) 
    FROM dbo.TableName 
) 
SELECT [cityprogram], [year], [quarter] 
FROM CTE 
WHERE RN = 1 

DEMO

CITYPROGRAM  YEAR QUARTER 
Abc    1999  4 
xyz    2000  3 

ROW_NUMBER возвращается только одна строка для каждой группы, даже если есть связи (cityprograms с тем же самым высоким год + квартал). Если вы хотите показать все самое высоко, вы можете заменить ROW_NUMBER на DENSE_RANK.