首页 > 解决方案 > 修改我的 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 表中,因此每个索赔只有一个汇款将被“激活”: 在此处输入图像描述

标签: sqlsql-serverquerying

解决方案


您可以像这样更改查询:

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;

这只会给你一排。未经测试(所以请运行并进行更改)。


推荐阅读