首页 > 解决方案 > 如何使用日期操作从三个表中提取数据

问题描述

我有三个表,如下图所示。我想做的是,

我正在使用在 XAMPP 和 SQL Server 2008 R2 上运行的 PHP 7.4,但我想通过纯 SQL 方式来实现它。

这是表格架构(粗略)

dbo.Parties
PartyID
PartyName

dbo.Recovery
RecoveryID
RecoveryDate


dbo.RecoveryBody
RecoveryID
CustomerID   //PartyID
AmountRecoverd

我想要这样的东西(以及 30、60、90 天的间隔)。我没有得到想要的结果,因为它给了我多个PartyName实例,而我只想要一个带有 last RecoveryDateAmountRecovered的PartyName实例。

SELECT Parties.PartyName, CAST(RecoveryDate AS date) AS RecoveryDate, AmountRecoverd 
FROM RecoveryBody
LEFT JOIN Recovery ON RecoveryBody.RecoveryID = Recovery.RecoveryID
LEFT JOIN Parties ON Parties.PartyID = RecoveryBody.CustomerID
GROUP BY PartyName, RecoveryDate, AmountRecoverd
ORDER BY RecoveryDate DESC

标签: sql-serversql-server-2008join

解决方案


你可以试试下面的东西。不确定结果,因为我没有要测试的数据。但是您可以使用CTE

WITH CTE AS(
SELECT distinct Parties.PartyID,
       Parties.PartyName, 
       CAST(RecoveryDate AS date) AS RecoveryDate, 
       AmountRecoverd,
       ROW_NUMBER()over (partition by Parties.PartyID ORDER BY RecoveryDate  DESC) RN
FROM RecoveryBody
LEFT JOIN Recovery ON RecoveryBody.RecoveryID = Recovery.RecoveryID
LEFT JOIN Parties ON Parties.PartyID = RecoveryBody.CustomerID)
SELECT * 
FROM CTE 
WHERE RN=1

推荐阅读