2016-11-24 4 views
0

Может ли кто-нибудь сказать мне, как выбрать максимальное количество строк для каждого раздела в SQL Server с помощью CTE.Как выбрать максимальный номер для каждого раздела в SQL Server

Предположим, что у любого сотрудника есть 4 строки транзакций, а у другой - только одна строка, а затем, как выбрать максимальные строки для этих сотрудников.

Я имею таблицу работы Я хочу получать максимальное количество строк для сотрудника, чтобы принести последнюю транзакцию для этого сотрудника я попытался следующего

With CTE as (
Select 
My fields, 
Rownum = row_number() over(partition by emplid order by date) from jobtable 
Where 
Myconditions 
) 
Select * from CTE B left outer join 
CTE A on A.emplid = B.emplid 
Where 
A.rownum = (select max(a2.rownum) from jobtable a2) 

ли левое соединение требуется выше или не в все нужно? Скажите, пожалуйста, как принести ROWNUM, если только одна строка существует для всех сотрудников, как описано выше запроса выборки только сотрудники, которые having.greatest ROWNUM в целом таблице

+0

Редактировать свой вопрос и предоставить образцы данных, желаемые результаты и запрос, который показывает вашу попытку ответить на вопрос. –

+0

Макс. Запись? Последняя транзакция или наибольшая ценность. Примерные данные были бы полезны для уменьшения или устранения предположений. –

+0

Как и другие, не совсем ясно, каков ваш желаемый результат, каковы ваши данные, что вы уже пробовали и какие конкретные проблемы вы столкнулись. Если вы можете предоставить часть этой информации, людям будет намного легче отвечать и помогать вам. – 3N1GM4

ответ

2
With CTE as (
    Select 
     My fields, 
     Rownum = row_number() over(partition by emplid order by date DESC) 
    from jobtable 
    Where 
     Myconditions 
) 

SELECT * 
FROM 
    cte 
WHERE 
    RowNum = 1 

Просто обратный порядок вашего ROW_NUMBER и выберите, где он равен 1. Номера строк могут возрастать (ASC) или нисходящие (DESC). Поэтому, если вы хотите получить самую последнюю дату, чтобы получить самую последнюю запись ORDER BY date DESC, если вы хотите получить самую раннюю запись, вы бы выбрали ORDER BY date ASC (or date)

Смежные вопросы