[英]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)
假設timstamp
是datetime
類型,並且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.