sql-server - 如何使用日期操作从三个表中提取数据
问题描述
我有三个表,如下图所示。我想做的是,
- 列出最后恢复日期为 30 天的缔约方。
- 列出最后恢复日期为 60 天的缔约方。
- 列出最后恢复日期为 90 天的缔约方。
我正在使用在 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 RecoveryDate和AmountRecovered的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
解决方案
你可以试试下面的东西。不确定结果,因为我没有要测试的数据。但是您可以使用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
推荐阅读
- python - 代码没有读取 Elif 或 Else 语句
- javascript - 静态包含 HTML 代码而不是在实时环境中的方法?
- visual-studio-code - 如果 VS Code 扩展选项卡没有打开,有没有办法打开它?
- python - 将 .TXT 数据作为一列拆分为“n”行,如 Python 中的 CSV?
- c - 编写一个文本文件以在 C 程序中保存向量和其他变量
- javascript - 类组件不等待函数返回
- flutter - 有没有办法为 Flutter StatefulBuilder 设置一个定期计时器,每 1 秒用 setState() 更新一次?
- django - 合并查询集时保留重复项(Django)
- python - 为什么我没有在这个高低代码中收到游戏结束消息
- javascript - 如何根据表单值进行计算