簡體   English   中英

SQL Server總和大於顯示的日期

[英]SQL Server Sum greater than date shown

我有一個稱為雇員的表:

CREATE TABLE Employees
(
   Id INT NOT NULL PRIMARY KEY IDENTITY(1,1),
   FullName NOT NULL NVARCHAR(100)
)

我還有一張叫Sales的桌子

CREATE TABLE SALES 
(
   Id INT NOT NULL PRIMARY KEY IDENTITY(1,1),
   CustomerId INT NOT NULL FOREGIN KEY REFERENCES SOMETABLE(id),
   AMOUNT DECIMAL(15,4) NOT NULL,
   EmployeeId INT NOT NULL FOREGIN KEY REFERENCES Employees(Id),
   SaleDate DATETIME2 NOT NULL
)

還有另一個表叫Calls

CREATE TABLE Calls
(
   Id INT NOT NULL PRIMARY KEY IDENTITY(1,1),
   Date DATETIME2 NOT NULL,
   EmployeeId INT NOT NULL FOREGIN KEY REFERENCES Employees(Id)
)

我需要運行一個查詢,該查詢將告訴我雇員最后一次出售某物的日期以及自那次出售以來他們可能會生氣的電話。

我試過的是

SELECT
      LAST_DATE_SOLD = MAX(Sales.Date)
    , Employees.FullName
    , Count(Calls.*)
FROM Employees
LEFT OUTER JOIN SALES ON Sales.EmployeeId = Employees.Id
LEFT OUTER JOIN Calls On Calls.EmployeeId = Employees.Id
GROUP BY Employees.FullName

如果有人可以提供幫助,那我就沒有正確的價值觀。

有很多方法可以給這只貓蒙皮。 這是其中之一。 請注意,這與日期大於上次銷售日期的Calls聯接在一起,因此它僅返回那些Calls。

with SortedResults as
(
    select *
        , ROW_NUMBER() over(partition by e.EmployeeID order by s.SalesDate desc) as RowNum
    from Sales s
    join Employee e on e.EmployeedID = s.Id
)

select s.SalesDate
    , s.FullName
    , count(*)
from SortedResults s
join Calls c on c.EmployeedId = s.EmployeeId and c.Date > s.SaleDate
where s.RowNum = 1
group by s.SalesDate, s.FullName

我認為Max(Sales.Date)是不正確的。 嘗試這個

SELECT
      LAST_DATE_SOLD = MAX(SaleDate)
    , Employees.FullName
    , Count(Calls.*)
FROM Employees
LEFT OUTER JOIN SALES ON Sales.EmployeeId = Employees.Id
LEFT OUTER JOIN Calls On Calls.EmployeeId = Employees.Id
GROUP BY Employees.FullName

您可以嘗試以下方法:

WITH    qry1
      AS ( SELECT   EmployeeId ,
                    MAX(SaleDate) LatestSaleDate
           FROM     dbo.SALES
           GROUP BY EmployeeId
         )
SELECT  qry1.EmployeeId ,
        LatestSaleDate ,
        SUM(CASE WHEN c.date > LatestSaleDate THEN 1
                 ELSE 0
            END) NumberOfCalls
FROM    qry1
        LEFT JOIN Calls c ON qry1.EmployeeId = c.EmployeeId
GROUP BY qry1.EmployeeId, LatestSaleDate
SELECT e.fullname,
       c.date,
       COUNT(c.id)
  FROM calls c
 INNER JOIN employees e
    ON c.employee_id = e.employee_id
 WHERE date >= (SELECT MAX(saledate)
                  FROM sales
                 WHERE employee_id = c.employee_id
                )
 GROUP BY e.fullname,
          c.date

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM