Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server总和大于显示的日期_Sql_Sql Server_Aggregate Functions - Fatal编程技术网

SQL Server总和大于显示的日期

SQL Server总和大于显示的日期,sql,sql-server,aggregate-functions,Sql,Sql Server,Aggregate Functions,我有一张名为employees的表格: CREATE TABLE Employees ( Id INT NOT NULL PRIMARY KEY IDENTITY(1,1), FullName NOT NULL NVARCHAR(100) ) 我还有一张桌子叫销售部 CREATE TABLE SALES ( Id INT NOT NULL PRIMARY KEY IDENTITY(1,1), CustomerId INT NOT NULL FOREGIN KEY RE

我有一张名为employees的表格:

CREATE TABLE Employees
(
   Id INT NOT NULL PRIMARY KEY IDENTITY(1,1),
   FullName NOT NULL NVARCHAR(100)
)
我还有一张桌子叫销售部

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
如果有人能帮上忙,我就得不到正确的值。

我认为
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 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
您可以尝试以下方法:

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

你得到了什么价值?您如何确定它们是错误的?请给我们一些已知的失败样本数据。我得到所有员工的1分,我知道他们是正确的,因为我自己输入了数据。如果输入的最后日期是正确的,则每个员工的工资应该在10英镑左右。只是伯爵不在。
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