开发者社区> 问答> 正文

选择每位用户最近日期的行

我有一张用户签入和签出时间的表(“ 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的最新记录,同时给我“ in”或“ out”值,如下所示:

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 这很接近,但并不完美。我知道最后一个分组依据不应存在,但是如果没有它,它将返回最近的时间,但不会返回其相对IO值。

有任何想法吗?谢谢!

展开
收起
保持可爱mmm 2020-05-11 17:01:28 456 0
1 条回答
写回答
取消 提交回答
  • 查询:

    SQLFIDDLE示例

    SELECT t1.* FROM lms_attendance t1 WHERE t1.time = (SELECT MAX(t2.time) FROM lms_attendance t2 WHERE t2.user = t1.user) 结果:

    | ID | USER | TIME | IO |

    | 2 | 9 | 1370931664 | out | | 3 | 6 | 1370932128 | out | | 5 | 12 | 1370933037 | in | 每次都会起作用的解决方案:

    SQLFIDDLE示例

    SELECT t1.* FROM lms_attendance t1 WHERE t1.id = (SELECT t2.id FROM lms_attendance t2 WHERE t2.user = t1.user
    ORDER BY t2.id DESC LIMIT 1)来源:stack overflow

    2020-05-11 17:01:38
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载