簡體   English   中英

MYSQL查詢:最新時間戳+過去30分鍾的唯一值

[英]MYSQL Query: latest timestamp + unique value from the last 30 minutes

我需要從mysql表中檢索具有唯一值的最新行。 簡單的表格布局是時間戳(now())和用戶名列。 該表每秒獲取幾次新數據,我需要用戶名唯一的最新行。

SELECT MAX(timestamp) as timestamp, username 
    FROM bla 
    WHERE timestamp < (now() - interval 30 minute) 
    GROUP BY username 
    ORDER BY timestamp DESC 

看來這個查詢沒有返回最新值,可能是因為該組正在做一些我不想要的事情......

如果你想看看最后30分鍾,那么我認為你想要使用“大於”而不是“小於”。

... WHERE timestamp > (now() - interval 30 minute) ...

雖然您編寫的內容確實有效,但更快的解決方案可能是使用LEFT JOIN在DB上我正在進行LEFT JOIN的實際速度是您獲得最新行中所有列的額外獎勵的兩倍想要那個信息:

SELECT *
    FROM `bla`
    WHERE bla.created_at > (now() - interval 30 minute) AND (next_bla.created_at IS NULL)
    LEFT JOIN bla next_bla ON bla.username = next_bla.username AND bla.created_at < next_bla.created_at
    ORDER BY bla.created_at DESC

這匹配bla /下一行中的每一行與時間戳相同的用戶名,並選擇沒有下一行的行(next_bla.created_at IS NULL),即它們是最近的行。

您還可以使用LIMIT子句來提高性能。

這是一篇很好的文章,解釋了GROUP BY如何詳細和清晰的語言: http//dev.mysql.com/tech-resources/articles/debunking-group-by-myths.html

Andomar的另一個類似答案 - MySQL“Group By”和“Order By”

SELECT MAX(timestamp) as timestamp, username 
    FROM bla 
    WHERE timestamp > (now() - interval 30 minute) 
    GROUP BY username 
    ORDER BY timestamp DESC 

SELECT MAX(timestamp) as timestamp, username 
    FROM bla 
    WHERE timestamp > date_sub(now(), interval 30 minute) 
    GROUP BY username 
    ORDER BY timestamp DESC 

暫無
暫無

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

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