Максимальный период времени - PullRequest
1 голос
/ 19 сентября 2019

У меня есть набор данных, в котором перечислены идентификаторы (EmployeeID), период времени в кварталах и годах, четырехзначный код, последние два числа года - это первые 2 числа, номер квартала - это вторые два.Первый квартал 2013 года будет «1301» (квартал). Он включает в себя активных и предыдущих сотрудников.Также есть продажи (Продажи).Набор данных имеет одну строку для каждого идентификатора в квартал.Мне нужны продажи на самый последний квартал.

вот мой код:

select EmployeeID, max(Quarter), Sales
from dataset;

Очевидно, что это неправильно, потому что он хочет, чтобы я группировал по employeeid, sales и т. Д., И дает мне несколько строк для каждого employeeid.

Смотри выше.

Мне нужен вывод по 1 строке на EmployeeID, в котором указаны последние кварталы и продажи за этот квартал.

Ответы [ 4 ]

0 голосов
/ 19 сентября 2019

Если вам нужен самый последний квартал в целом:

select ds.*
from dataset ds
where ds.quarter = (select max(ds2.quarter) from dataset ds2);

Если вы хотите максимум на сотрудника :

select ds.*
from dataset ds
where ds.quarter = (select max(ds2.quarter)
                    from dataset ds2
                    where ds2.employeeid = ds.employeeid
                   );

Или в Oracle выможно использовать keep и агрегацию:

select employeeid, max(quarter),
       max(sales) keep (dense_rank first order by quarter desc) as sales
from dataset
group by employeeid
0 голосов
/ 19 сентября 2019

Если вы используете SQL Server, вы можете использовать общее табличное выражение

WITH MaxQuarters(EmployeeID, MaxQuarter)  
AS   
(  
    SELECT EmployeeID, MAX(Quarter) as MaxQuarter  
    FROM dataset  
    GROUP BY EmployeeID
)  
SELECT EmployeeID, Quarter, Sales  
FROM dataset ds
JOIN MaxQuarters mq on ds.EmployeeID = mq.EmployeeID 
0 голосов
/ 19 сентября 2019

Все продажи за последний квартал:

select *
from dataset
where quarter = (select max(quarter) from dataset);

Все продажи, совершенные сотрудником в последний раз (т. Е. Последний квартал на одного сотрудника = разные последние кварталы):

select *
from dataset
where (employeeid, quarter) in
(
  select employeeid, max(quarter)
  from dataset
  group by employeeid
);
0 голосов
/ 19 сентября 2019

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

;WITH MaxQuarter AS(select EmployeeID, MaxQuarter = max(Quarter) from dataset)

select EmployeeID, Quarter, Sales 
from dataset ds
inner join MaxQuarter m on m.EmployeeID = ds.EmployeeID and m.MaxQuarter = ds.Quarter 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...