SQL Server:查询指定时段数据,同一客户同日仅保留最早记录
问题:获取指定时间段内客户每日最早记录的SQL查询修正
需求说明:
需要编写SQL查询,获取选定时间段内的所有记录;如果同一客户(cd_devedor)在同一天存在2条及以上记录,仅保留其中最早的那一条。涉及字段包括:
cd_devedor:客户编码(int类型)dt_ocorrencia:记录日期(datetime类型)cd_historico:记录编码(int类型)
现有代码仅能返回客户的最后一条记录,无法满足需求,原代码如下:
DECLARE @DATA1 AS DATETIME SELECT @DATA1 = INFORMAR('INFORME DATA INICIAL',H,{DIA/HORA INICIAL}) DECLARE @DATA2 AS DATETIME SELECT @DATA2 = INFORMAR('INFORME DATA FINAL',H,{DIA/HORA FINAL}) select Oco.CD_Credor, Dev.CD_devedor, r.Dt_Ocorrencia as Data, Oco.Cd_Historico, from ( SELECT cd_devedor, MAX(dt_ocorrencia) as dt_ocorrencia FROM OCORRENCIA group by cd_devedor )r inner join ocorrencia oco on oco.cd_devedor = r.cd_devedor and oco.dt_ocorrencia = r.dt_ocorrencia inner join Devedor Dev on (Oco.Cd_Devedor = Dev.Cd_Devedor) inner join Historico His on (Oco.Cd_Historico = His.Cd_Historico) where (oco.Dt_Ocorrencia >= @DATA1) AND (oco.Dt_Ocorrencia <= @DATA2) and oco.cd_devedor = 237
修正后的SQL查询
DECLARE @DATA1 AS DATETIME SELECT @DATA1 = INFORMAR('INFORME DATA INICIAL',H,{DIA/HORA INICIAL}) DECLARE @DATA2 AS DATETIME SELECT @DATA2 = INFORMAR('INFORME DATA FINAL',H,{DIA/HORA FINAL}) SELECT Oco.CD_Credor, Dev.CD_devedor, r.Dt_Ocorrencia as Data, Oco.Cd_Historico FROM ( -- 按客户+日期分组,取每个客户当日最早的记录时间 SELECT cd_devedor, MIN(dt_ocorrencia) as dt_ocorrencia FROM OCORRENCIA WHERE dt_ocorrencia BETWEEN @DATA1 AND @DATA2 GROUP BY cd_devedor, CAST(dt_ocorrencia AS DATE) -- 按客户和日期分组,确保是每日最早 ) r INNER JOIN ocorrencia oco ON oco.cd_devedor = r.cd_devedor AND oco.dt_ocorrencia = r.dt_ocorrencia INNER JOIN Devedor Dev ON Oco.Cd_Devedor = Dev.Cd_Devedor INNER JOIN Historico His ON Oco.Cd_Historico = His.Cd_Historico -- 若需要查询特定客户,保留下面的条件;否则删除 WHERE oco.cd_devedor = 237
关键修改点说明
子查询逻辑调整:
- 原代码用
MAX(dt_ocorrencia)取的是客户在整个时间段内的最晚记录,现在改为MIN(dt_ocorrencia),并新增CAST(dt_ocorrencia AS DATE)作为分组字段,确保按客户+日期分组,取每个客户当日的最早记录。 - 将时间段过滤条件移到子查询中,减少后续关联的数据量,提升查询效率。
- 原代码用
语法修正:
- 移除了原SELECT语句末尾多余的逗号,避免语法错误。
灵活性优化:
- 保留了特定客户的过滤条件,可根据需求选择保留或删除,实现查询单个客户或所有客户的需求。
内容的提问来源于stack exchange,提问作者TreshGaucho
相关产品推荐
相关产品推荐

