SQL - 按日期限制联接记录

JDV*_*V72 0 sql sql-server join sum

在MSSQL中使用两个表:

一个表,[CUSTOMER],包含捐助者的信息. - 相关列:[CustID],[Name]一个表,[DONATION],包含每个捐赠的记录. - Relevent列:[CustID],[Amount],[Date]表共享一个键,[CustID].

我想根据每个[CustID]汇总[Amounts]

SELECT DONATION.CUSTID
,PEOPLE.NAME
,SUM (DONATION.AMOUNT) as TOTAL_DONATION
FROM [dbo].[DONATION] INNER JOIN [dbo].[PEOPLE] ON DONATION.CUSTID = PEOPLE.CUSTID
GROUP BY
DONATION.CUSTID
,PEOPLE.NAME
HAVING SUM (DONATION.AMOUNT) > 100
Run Code Online (Sandbox Code Playgroud)

即使添加了HAVING子句,此查询也可以正常工作.

当我想限制捐赠的日期聚合时(添加到SELECT,GROUP BY和HAVING子句)但是......

SELECT DONATION.CUSTID
,PEOPLE.NAME,DONATION.DATE
,SUM (DONATION.AMOUNT) as TOTAL_DONATION
    FROM [dbo].[DONATION] INNER JOIN [dbo].[PEOPLE] ON DONATION.CUSTID = PEOPLE.CUSTID
    GROUP BY
DONATION.CUSTID
,PEOPLE.NAME
,DONATION.DATE
HAVING SUM (DONATION.AMOUNT) > 100
and DONATION.DATE > '1-1-2010'
Run Code Online (Sandbox Code Playgroud)

查询不再返回每个人捐款的总和,而是返回符合HAVING标准的每个人的个人捐款.

我该如何实施这个日期限制?是我如何加入或总结或......?谢谢.

Ric*_*iwi 5

将其移动到WHERE子句

SELECT DONATION.CUSTID
      ,PEOPLE.NAME
      ,SUM (DONATION.AMOUNT) as TOTAL_DONATION
FROM [dbo].[DONATION]
INNER JOIN [dbo].[PEOPLE] ON DONATION.CUSTID = PEOPLE.CUSTID
WHERE DONATION.DATE > '1-1-2010'
GROUP BY
       DONATION.CUSTID
      ,PEOPLE.NAME
HAVING SUM (DONATION.AMOUNT) > 100
Run Code Online (Sandbox Code Playgroud)

这意味着什么:

- given the people who donated
- look only at data where donation date is in 2010 or later
- and within that data, show the people who donated a total of more than 100
Run Code Online (Sandbox Code Playgroud)