获取上次日志条目

时间:2011-10-04 23:01:21

标签: mysql sql database

我可能在这里过分简化了我的问题:How to use MAX in MySQL?

给定用户的日志表:

TABLE: user_log
- user_log_id (PK)
- user_id (FK)
- status
- timestamp

我需要的是:所有用户的最后一个用户日志条目是某个status且至少15分钟。如果用户的最新日志条目是特定状态且15分钟,我需要在我的应用程序中执行某些操作。

如何查询?

4 个答案:

答案 0 :(得分:1)

怎么样?

select * from user_log
where timestamp in (select max(timestamp) from user_log)
and status = 'certain'
and timestamp > DATE_SUB(now(), INTERVAL 15 MINUTE)

答案 1 :(得分:0)

假设timstampdatetime类型,user_id,timestamp唯一

SELECT a.*
FROM user_log a
INNER JOIN
(SELECT user_id, MAX(`timestamp`) as ts FROM 
 user_log b WHERE timestamp <= NOW()-interval 15 MINUTE 
 GROUP BY user_id)b
ON (b.user_id = a.user_id AND a.`timestamp` = b.ts)

如果user_log_id是自动递增,您可以选择MAX(user_log_id)而不是'MAX(时间戳)。

答案 2 :(得分:0)

您需要执行“两个查询”以获得每个用户的最后一个条目

第一部分是获取每个用户的最后一个条目,第二部分是获取该条目的数据:

SELECT * FROM user_log u
INNER JOIN (
    SELECT MAX(user_log_id) as user_log_id, user_id
    FROM user_log
    WHERE TIMEDIFF(NOW(), timestamp) <= '00:15:00'
    GROUP BY user_id
) as a
ON u.user_log_id = a.user_log_id

答案 3 :(得分:0)

这将仅向您显示其上一个时间戳至少为15分钟且状态为@a_certain_status的用户。如果您想查找用户15分钟前的日志具有该状态(忽略最近15分钟内的任何日志,无论这些日志中的状态如何),请使用@ a1ex07的答案。

SELECT ul.*
FROM user_log AS ul
  JOIN
      ( SELECT user_id
             , MAX(`timestamp`) as maxts
        FROM user_log 
        GROUP BY user_id
        HAVING MAX(`timestamp`) <= NOW() - INTERVAL 15 MINUTE 
      ) AS ulg
    ON  ulg.user_id = ul.user_id 
    AND ulg.maxts = ul.`timestamp`
WHERE ul.status = @a_certain_status