1

我正在尝试从表中提取数据。为了简化,我有一个表(time_entries)有 3 个列 user_name、entry_type 和 entry_datetime

这是一个示例输出

user_name| entry_type   | entry_datetime
 User1   |   Time In    | 28-JUL-13  16:40:40
 User1   |   Time Out   | 28-JUL-13  16:40:41
 User2   |   Time In    | 28-JUL-13  16:41:13
 User2   |   Time Out   | 28-JUL-13  16:41:15
 User3   |   Time In    | 28-JUL-13  16:42:32

我在这里要做的是在每个用户最后一次登录时提取结果

我的查询

SELECT te.user_name, te.entry_type,  MAX(te.entry_datetime) AS date
FROM time_entries AS te
GROUP BY te.user_name 

只有在错误的结果下才能正常运行,这是下面的输出

输出

user_name| entry_type | entry_datetime
User1    | Time In    | 28-JUL-13 16:40:41
User2    | Time In    | 28-JUL-13 16:41:15
User3    | Time In    | 28-JUL-13 16:42:32

user_name 和 entry_datetime 是正确的,但是 entry_type 都是 Time In。User1 和 User2 entry_type 必须是 Time Out。

有人知道这个问题的解决方案吗?

4

3 回答 3

3

您可以使用过滤联接列出每个用户的最新条目:

select  *
from    time_entries te
join    (
        select  user_name
        ,       max(entry_datetime) as maxdt
        from    time_entries
        group by
                user_name
        ) filter
on      filter.user_name = te.user_name
        and filter.maxdt = te.entry_datetime

SQL Fiddle 的工作示例。

于 2013-07-29T09:45:01.187 回答
1

我没有测试过这个,但它可能是这样的

SELECT 
   te.user_name as name, 
   MAX(te.entry_datetime) AS date, 
   (SELECT te2.entry_type 
       FROM time_entries AS te2 
       WHERE te2.user_name = name AND te2.entry_datetime = date)
FROM 
   time_entries AS te
GROUP BY 
   te.user_name 
于 2013-07-29T09:44:58.403 回答
1

试试这个...

SELECT te.user_name, te.entry_type,  te.entry_datetime
FROM time_entries AS te
WHERE te.entry_datetime IN (SELECT MAX(te2.entry_datetime)
                            FROM FROM time_entries AS te2
                            WHERE te2.user_name = te.user_name)

这假设不会有 entry_datetime 重复值的条目

于 2013-07-29T09:46:37.270 回答