我有一个问题,希望你能帮助我。
我有关于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:对不起我的英语,我正在学习答案 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
随日期增加,这将有效。
另一种处理此查询的方法是使用top
和order 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”。是说原始行具有最大日期的另一种方式。