我有一个包含用户进入和退出记录的表,我需要获取每个用户的最后一次签名。
这是我的查询,但它返回重复的 USER_ID,我只想要最新的。
SELECT c.ID, c.ID_USUARIO, c.FECHA, c.TIPO
FROM acceso c
INNER JOIN
(
SELECT MAX(FECHA) max_time
FROM acceso
GROUP BY Date(`FECHA`)
) AS t
ON c.FECHA = t.max_time
我的“访问”表:
ID ID_USUARIO FECHA TIPO
-- ---------- ------------------- ------
1 010 2020-07-05 15:20:01 ENTRADA
2 010 2020-07-05 18:25:00 SALIDA
3 066 2020-07-05 10:00:00 SALIDA
4 066 2020-07-05 12:00:00 ENTRADA
5 066 2020-07-05 18:00:00 SALIDA
6 011 2020-07-05 13:20:01 ENTRADA
7 011 2020-07-06 10:25:00 SALIDA
7 011 2020-07-06 11:25:00 ENTRADA
我想得到:
ID ID_USUARIO FECHA TIPO
-- ---------- ------------------- ------
2 010 2020-07-05 18:25:00 SALIDA
5 066 2020-07-05 18:00:00 SALIDA
7 011 2020-07-06 11:25:00 ENTRADA
SQLFiddle: http ://sqlfiddle.com/#!9/414960/2
要获得每个用户的最大日期,您必须按
id_usuario
. 将保留以下内容:您对这个查询所做的是按访问表中用户的 ID 进行分组,并选择日期中最大的一个,这相当于最后一个。
现在,为避免两个用户的日期相同,请在 中建立第二个条件
JOIN
:如果您只想在“OUT”时显示每个用户的最后一条记录,则必须执行以下查询:
通过这种方式,您可以按 id_usuario 进行分组,这样它们就不会重复,并且您可以从 OUTPUT 中过滤掉最后一个。