当前位置: 首页 > 面试题库 >

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

施子民
2023-03-14
问题内容

我有一张用户签入和签出时间的表(“ 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值。

有任何想法吗?谢谢!


问题答案:

查询:

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)


 类似资料:
  • 问题内容: 您好,我有一个带有列的表: *使用oracle 我想知道如何获取给定用户的最新添加的文档。 谢谢 问题答案:

  • 本文向大家介绍贴近用户体验的Jquery日期、时间选择插件,包括了贴近用户体验的Jquery日期、时间选择插件的使用技巧和注意事项,需要的朋友参考一下 分享一款贴近Jquery日期、时间选择插件。这是一款双日历jQuery日期选择时间插件pickerDateRange。效果图如下: 在线预览    源码下载 Js代码 选项及事件使用说明 datepicker提供了丰富的选项设置事件方法调用,笔者先

  • 问题内容: 我有一张桌子,如下所示: 请注意,MyDate格式为YYMMDD,而MyTime为24小时格式。 我想用最新的MyDate和MyTime返回唯一的MyKey的结果。预期的结果将是这样的: 任何帮助都感激不尽。谢谢。 问题答案: 首先,将日期和时间列合并为日期时间,以便轻松订购它们。自从我使用Sql Server以来已经有一段时间了,但是row_number()函数和分区是一种查找由另一

  • 问题内容: 从下面的数据中,我需要使用SQL Server 2005为每个链接ID选择最接近指定日期的记录: 因此,使用01/10/2010选择它们应返回: 我知道这是有可能的,但似乎无法绕开我的头脑(必须太接近一天的结束了:P)如果有人可以帮助或朝正确的方向轻轻推一下,将不胜感激! 编辑: 另外我也遇到了这个sql以获取最接近的日期: 但无法弄清楚如何正确地整合到查询中… 谢谢 问题答案: 你可

  • 我想在hibernate中选择最大日期,但出现以下错误: Java语言sql。SqlSyntaxerRorexException:ORA-00932:不一致的数据类型:预期的时间戳得到的数字 查询是: 数据库是oracle。数据库中该字段的类型为时间戳(6)

  • 问题内容: 给定此基准日期: 我想在列表中找到一个包含最接近日期的元组,但是它不能是更早的日期。 所以这里的输出应该是(它不能是第三个元组,因为那里的日期早于基准日期) 我的问题是,是否存在用于此类日期比较的任何模块?我试图先将所有数据更改为格式,然后进行比较,但是我的代码变得很丑陋,而且切片很多。 @编辑: 要测试的大清单: 要测试的大清单: 问题答案: 将日期转换为datetime对象,所以现