如何避免Access SQL中的重复ID

时间:2014-02-12 14:18:57

标签: sql ms-access group-by duplicates

我有一个问题,希望你能帮助我。

我有关于Access SQL的下一个查询。

SELECT 
    ID_PLAN_ACCION, ID_SEGUIMIENTO, 
    Max(FECHA_SEGUIMIENTO) AS MAX_FECHA
FROM 
    SEGUIMIENTOS
WHERE 
   (((ID_PLAN_ACCION) = [CODPA]))
GROUP BY 
   ID_PLAN_ACCION, ID_SEGUIMIENTO;

它返回此信息:

ID_PLAN_ACCION  ID_SEGUIMIENTO  MAX_FECHA
-----------------------------------------------    
A1-01                  1             16/01/2014
A1-01                  2             30/01/2014

但我真的需要它抛弃这个:

ID_PLAN_ACCION  ID_SEGUIMIENTO  MAX_FECHA
----------------------------------------------    
A1-01                  2             30/01/2014

如您所见,我只需要具有最近日期的记录,而不是所有记录

GROUP BY不起作用。

请告诉我我该怎么办?我是新人。

非常感谢!!

PD:对不起我的英语,我正在学习

1 个答案:

答案 0 :(得分:2)

这将产生您想要的结果:

SELECT ID_PLAN_ACCION, max(ID_SEGUIMIENTO) as ID_SEGUIMIENTO, Max(FECHA_SEGUIMIENTO) AS MAX_FECHA
FROM SEGUIMIENTOS
WHERE  ID_PLAN_ACCION = [CODPA]
GROUP BY ID_PLAN_ACCION;

我从id_sequiimiento删除了group by并添加了一个聚合函数来获取最大值。如果id随日期增加,这将有效。

另一种处理此查询的方法是使用toporder by

SELECT top 1 ID_PLAN_ACCION, ID_SEGUIMIENTO, FECHA_SEGUIMIENTO
FROM SEGUIMIENTOS
WHERE  ID_PLAN_ACCION = [CODPA]
ORDER BY FECHA_SEGUIMIENTO desc;

这是有效的,因为你只返回一行。

编辑:

如果您有更多代码,那么您需要更复杂的查询。以下是使用where / not exists

的方法
SELECT ID_PLAN_ACCION, ID_SEGUIMIENTO, FECHA_SEGUIMIENTO
FROM SEGUIMIENTOS s
WHERE  not exists (select 1
                   from SEGUIMIENTOS s2
                   where s.ID_PLAN_ACCION = s2.ID_PLAN_ACCION and
                         s2.FECHA_SEGUIMIENTO > s.FECHA_SEGUIMIENTO
                  )
ORDER BY FECHA_SEGUIMIENTO desc;

您可以将其读作:“从SEGUIMIENTOS获取所有行,其中没有其他行具有相同的具有更大日期的ID_PLAN_ACCION”。是说原始行具有最大日期的另一种方式。