sql - 修改我的 SQL Server 查询——有时返回太多行
问题描述
我需要更新以下查询,以便它只为每个父母(索赔)返回一个子记录(汇款)。
表 Remit_To_Activate 只包含每个索赔的一个日期/时间戳,这正是我想要的。
但是,当我将完整的汇款表加入其中时,由于某些索赔有多个具有相同日期/时间戳的汇款,因此对于这些索赔 ID,最外面的查询为每个索赔返回超过 1 行。
SELECT * FROM REMITTANCE
WHERE BILLED_AMOUNT>0 AND ACTIVE=0
AND REMITTANCE_UUID IN (
SELECT REMITTANCE_UUID FROM Claims_Group2 G2
INNER JOIN Remit_To_Activate t ON (
(t.ClaimID = G2.CLAIM_ID) AND
(t.DATE_OF_LATEST_REGULAR_REMIT = G2.CREATE_DATETIME)
)
where ACTIVE=0 and BILLED_AMOUNT>0
)
我相信如果我将 REMITTANCE_UUID 作为一列包含在 Remit_To_Activate 中,问题就会得到解决。这才是真正的问题。这就是我创建 Remit_To_Activate 表的方式(尝试获取索赔的最新汇款):
SELECT MAX(create_datetime) as DATE_OF_LATEST_REMIT,
MAX(claim_id) AS ClaimID,
INTO Latest_Remit_To_Activate
FROM Claims_Group2
WHERE BILLED_AMOUNT>0
GROUP BY Claim_ID
ORDER BY Claim_ID
Claims_Group2 包含以下字段:REMITTANCE_UUID、CLAIM_ID、BILLED_AMOUNT、CREATE_DATETIME
这是目前给我带来问题的 2 行——它们都是 SAME CLAIM 的汇款,具有相同的 TIMESTAMP。我只想要其中一个在 Remits_To_Activate 表中,因此每个索赔只有一个汇款将被“激活”: 在此处输入图像描述
解决方案
您可以像这样更改查询:
SELECT
p.*, latest_remit.DATE_OF_LATEST_REMIT
FROM
Remittance AS p inner join
(SELECT MAX(create_datetime) as DATE_OF_LATEST_REMIT,
claim_id,
FROM Claims_Group2
WHERE BILLED_AMOUNT>0
GROUP BY Claim_ID
ORDER BY Claim_ID) as latest_remit
on latest_remit.claim_id = p.claim_id;
这只会给你一排。未经测试(所以请运行并进行更改)。
推荐阅读
- reactjs - 为什么 window.location.pathname 在一个函数中起作用,而在另一个函数中不起作用?
- c - 如何将循环的最终结果作为 int 以供进一步使用?
- python-3.x - 为什么我的 lambda/alexa 托管技能权限被拒绝?
- c++ - Clang++ 使链接器在模板类上失败(但它适用于 g++)
- typescript - 对象字面量只能指定已知的属性,而 'id' 不存在于类型 'ModelAttributes' 中
- pandas - Seaborn:如何在绘图的 X 轴上的每个值之后添加一个“%”符号,而不是将值转换为百分比?
- javascript - 词过滤javascript
- android - 将框架布局放置在 ConstraintLayout 中的工具栏下方
- python - scipy.integrate.solve_ivp 有问题
- c# - C# Google 地理编码:即使遵循所需的步骤,也会不断获得权限被拒绝