簡體   English   中英

獲取最后的日志條目

[英]Get last log entry

我可能在這里簡化了我的問題: 如何在MySQL中使用MAX?

給定用戶的日志表:

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

我需要什么:所有用戶的最后一個用戶日志條目,該條目處於一定status並且至少存在15分鍾。 如果用戶的最新日志條目處於特定狀態且已存在15分鍾,則需要在應用程序中執行某些操作。

我該如何查詢?

關於什么?

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

假設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(timestamp)。

您需要執行“兩個查詢”以獲取每個用戶的最后一個條目

第一部分是獲取每個用戶的最后一個條目,第二部分是獲取該條目的數據:

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

這將僅向您顯示其上一個時間戳至少為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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM