-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGetRankedSalesByEmployee.sql
45 lines (45 loc) · 1.08 KB
/
GetRankedSalesByEmployee.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
CREATE FUNCTION GetCustomerOrderReport(@startDate DATE, @endDate DATE)
RETURNS TABLE
AS
RETURN (
WITH RankedOrders AS (
SELECT
CustomerID,
OrderID,
OrderDate,
TotalAmount,
ROW_NUMBER() OVER (PARTITION BY CustomerID ORDER BY TotalAmount DESC) AS OrderRank
FROM
Orders
WHERE
OrderDate BETWEEN @startDate AND @endDate
),
FrequentCustomers AS (
SELECT
CustomerID,
COUNT(*) AS TotalOrders,
AVG(TotalAmount) AS AverageOrderAmount
FROM
Orders
WHERE
OrderDate BETWEEN @startDate AND @endDate
GROUP BY
CustomerID
HAVING
COUNT(*) > 5
)
SELECT
R.CustomerID,
R.OrderID,
R.OrderDate,
R.TotalAmount,
R.OrderRank,
F.TotalOrders,
F.AverageOrderAmount
FROM
RankedOrders R
INNER JOIN
FrequentCustomers F ON R.CustomerID = F.CustomerID
WHERE
R.OrderRank = 1
)