我正在尝试从表中提取数据。为了简化,我有一个表(time_entries)有3个colums 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必须是超时。
任何人都知道这个问题的解决方案?
答案 0 :(得分: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
答案 1 :(得分: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
答案 2 :(得分: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
的条目