【发布时间】:2013-06-06 22:53:12
【问题描述】:
我有一个用户签入和签出时间表(“lms_attendance”),如下所示:
id user time io (enum)
1 9 1370931202 out
2 9 1370931664 out
3 6 1370932128 out
4 12 1370932128 out
5 12 1370933037 in
我正在尝试创建此表的视图,该视图将仅输出每个用户 ID 的最新记录,同时给我“输入”或“输出”值,例如:
id user time io
2 9 1370931664 out
3 6 1370932128 out
5 12 1370933037 in
到目前为止,我已经很接近了,但我意识到视图不会接受子查询,这使得它变得更加困难。我得到的最接近的查询是:
select
`lms_attendance`.`id` AS `id`,
`lms_attendance`.`user` AS `user`,
max(`lms_attendance`.`time`) AS `time`,
`lms_attendance`.`io` AS `io`
from `lms_attendance`
group by
`lms_attendance`.`user`,
`lms_attendance`.`io`
但我得到的是:
id user time io
3 6 1370932128 out
1 9 1370931664 out
5 12 1370933037 in
4 12 1370932128 out
这很接近,但并不完美。我知道最后一个 group by 不应该在那里,但是没有它,它会返回最近的时间,但不会返回它的相对 IO 值。
有什么想法吗? 谢谢!
【问题讨论】:
-
返回手册。您会看到,无论有无(相关和不相关)子查询,它都提供了解决此问题的方法。
-
@Barmar,从技术上讲,正如我在回答中指出的那样,这是带有 greatest-n-per-group 标签的所有 700 个问题的副本。
-
@Prodikl,什么是“io(枚举)”?
-
我有一个名为“IO”的列,代表“输入或输出”,它是一个枚举类型,可能值为“输入”或“输出”。这用于跟踪人们何时签入和签出班级。
标签: mysql sql greatest-n-per-group