sql - MS SQL 如何根据最旧日期查询金额

标签 sql sql-server t-sql

我正在连接两个表:tblAccount 和 tblInvoice。 TblAccount 有多个与每个帐户相关的发票。我正在尝试根据最旧的 InvoiceDate 查询 TotalSavings 金额,如果同一日期有两个金额值,那么我需要将这两个金额相加。我认为我这样做是正确的,但下面的代码没有给我所需的输出。

SELECT TA.AccountID,
MIN(TI.InvoiceDate) AS InvoiceDate,
TI.TotalSavings
FROM tblAccount AS TA
LEFT JOIN tblInvoice AS TI
ON TA.AccountID=TI.AccountID
WHERE TI.TotalSavings>0
AND
TI.InvoiceDate IS NOT NULL
GROUP BY TA.AccountID, TI.TotalSavings
ORDER BY TA.AccountID

当我连接两个表时,我得到以下结果。

AccountID   Invoice Date    TotalSavings
ABC 6/30/2012   10
ABC 12/31/2013  20
ABC 6/1/2014    30
BCA 9/30/2011   40
BCA 1/31/2012   50
BCA 11/30/2011  60
CBA 3/1/2015    70
CBA 3/1/2015    80

我正在寻找这样的输出

AccountID   Invoice Date    TotalSavings
ABC 6/30/2012   10
BCA 9/30/2011   40
CBA 3/1/2015    150

如果您能在此论坛上提供任何帮助,我将不胜感激。

最佳答案

连接子查询结合使用

select a.accountid, s.invoicedate, 
       sum(s.TotalSavings) as TotalSavings
from tblAccount a 
left join tblInvoice s on s.accountid = a.accountid 
where s.invoicedate is not null and s.TotalSavings > 0 and
      s.invoicedate = (select min(invoicedate) 
                       from tblInvoice 
                       where accountid = a.accountid)
group by a.accountid, s.invoicedate;

您还可以仅使用 exists 来切换 join

select accountid, invoicedate, sum(TotalSavings) as TotalSavings
from tblInvoice s 
where exists (select 1 from tblAccount where accountid  = s.accountid) and 
TotalSavings > 0 and
invoicedate = (select min(invoicedate) from tblInvoice where accountid  = s.accountid)
group by accountid, invoicedate

关于sql - MS SQL 如何根据最旧日期查询金额,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49831012/

相关文章:

sql-server - 无法使用 SSMS 通过 Windows 身份验证连接到本地 SQL Server

sql - 如何检索将匹配所有行与第一个子查询的记录

php - 选择带有 IN 和 TEXT 字段的查询

python - 从 pyodbc 调用过程时出错

sql-server-2005 - 在SQL Server中,如何对实例中的所有数据库执行一段tsql?

sql - 将 TSQL 转换为 JSON

t-sql - 在特定条件下原始转换为字符串

sql - 在关系数据库中存储大量点(x,y,z)

sql - 同时从数据库中检索多种不同类型的模型

sql - 查询同一服务器上不同数据库中的两个表