Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
krayshon Member Откуда: Сообщений: 12 |
Для каждого месяца найти сотрудников с наивысшей премией, если премия за 1 месяц у нескольких сотрудников оказалась одинаковая, выбрать всех таких сотрудников. Есть 2 варианта, но они оба не полностью решают задачу, нужна помощь. SELECT month,name, prem from t2, t1 where prem in (select max(prem) from t1) and t2.id = t1.Id_emp данный вариант выводит только 1 сотрудника с макс премией за все месяцы. SELECT month,name,MAX(prem) over(partition by month ) as Max_Prem from t1, t2 where t2.id = t1.Id_emp данный вариант выводит максимальную премию за месяц и присваивает ее всем строкам в этом месяце и так с каждым. |
20 ноя 19, 15:32 [22020828] Ответить | Цитировать Сообщить модератору |
londinium Member Откуда: Киев Сообщений: 1121 |
покажите, пожалуйста, примеры таблиц с данными |
20 ноя 19, 15:38 [22020847] Ответить | Цитировать Сообщить модератору |
krayshon Member Откуда: Сообщений: 12 |
t2: -id -name t1: -id_emp (внешний ключ таблицы t2) -month -prem |
||||
20 ноя 19, 15:41 [22020852] Ответить | Цитировать Сообщить модератору |
Minamoto Member Откуда: Москва Сообщений: 1150 |
krayshon,SELECT TOP (1) WITH TIES [month],name, prem FROM t2 INNER join t1 ON t2.id_emp = t1.id ORDER BY rank() OVER (PARTITION BY [MONTH] ORDER BY prem DESC) |
20 ноя 19, 15:51 [22020871] Ответить | Цитировать Сообщить модератору |
londinium Member Откуда: Киев Сообщений: 1121 |
попробуйте что-тов таком духе WITH CTE AS ( SELECT T.ID_EMP,T.MONTH,T.PREM, RANK()OVER(PARTITION BY T.MONTH ORDER BY T.PREM DESC)AS XCOL FROM T1 AS T ) SELECT C.ID,C.MONTH,C.PREM FROM CTE AS C WHERE C.XCOL=1 |
||
20 ноя 19, 15:53 [22020875] Ответить | Цитировать Сообщить модератору |
krayshon Member Откуда: Сообщений: 12 |
благодарю |
||||
20 ноя 19, 15:54 [22020877] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |