Я пытаюсь найти другой способ написать запрос ROW_NUMBER()
, используя CROSS APPLY
, чтобы я мог сравнить производительность.
В приведенном ниже простом примере создается таблица сотрудников, вставляются некоторые тестовые данные и используется SELECT
с оконной функцией ROW_NUMBER()
для поиска сотрудников в каждом отделе с самым длительным сроком пребывания.
Есть ли другой способ написать SELECT
, используя CROSS APPLY
?
CREATE TABLE [dbo].[tblEmployee]
(
[ID] [INT] NOT NULL,
[DeptID] [TINYINT] NOT NULL,
[EmpName] [VARCHAR](100) NOT NULL,
[Tenure] [TINYINT] NOT NULL,
CONSTRAINT [PK_tblEmployee]
PRIMARY KEY CLUSTERED ([ID] ASC)
) ON [PRIMARY]
GO
INSERT INTO dbo.tblEmployee (ID, DeptID, EmpName, Tenure)
VALUES ('1', '1', 'John', 2),
('2', '1', 'Mary', 5),
('3', '2', 'Joe', 3),
('4', '3', 'Bill', 10),
('5', '2', 'Marilynn', 9),
('6', '3', 'Sue', 7);
SELECT
EmpName, DeptID, Tenure
FROM
(SELECT
EmpName, DeptID, Tenure,
ROW_NUMBER() OVER(PARTITION BY DeptID ORDER BY Tenure DESC) TenureRank
FROM
tblEmployee) e
WHERE
e.TenureRank = 1
ORDER BY
DeptID
EDIT : Я бы предпочел не использовать CTE как частьSELECT