簡體   English   中英

根據MySQL數據庫中的計數和日期獲取前5個項目

[英]Get the top 5 items based on count and date in MySQL database

我希望在某個時間段內(例如7天)獲得表格中的前5個項目。

這是表結構和一些隨機示例數據

user_id | entry_id |   sig  |    timestamp
 1          1           8846    2015-03-27 20:49:56 
 1          2           8846    2015-03-27 20:49:56 
 1          3           8846    2015-03-27 20:49:56 
 1          4           4544    2015-03-27 20:49:56 
 1          5           4544    2015-03-27 20:49:56 
 1          6           65445   2015-03-27 20:49:56

User_id是唯一的,entry_id是主鍵。

因此,例如,我想查詢sig列,以計算7天內8846出現20次,每個數字的出現次數。

這是我到目前為止的SQL查詢,它統計出現的次數,但不計算一段時間內的次數。 目前,它的基本功能只需要一個工作示例。

SELECT sig, count(sig), sig_count FROM event 
GROUP BY sig
ORDER BY sig_count
DESC LIMIT 5;

(編輯)其他詳細信息
我以前錯誤地表達了這個問題。 我真正要說的是,我需要根據最近7天時間內發生的事件獲得前5位信號 ,並返回這些記錄。 數據將用於填充各種圖表。

因此,例如,如果我可以得到結果然后使用PHP,則可以獲取entry_id並對其進行遍歷,以獲取時間戳和出現次數(頻率“ x”時間“ y”),然后將其彈出到圖中。

我猜第一個查詢會得到計數結果。 然后可以運行第二個查詢以獲取特定的信號ID以及最近7天與之相關的所有記錄。

任何貢獻將不勝感激。

由於每個組沒有相同的時間范圍(每行7天之內有所不同),因此您必須使用子查詢來獲取每行7天之內的計數,這會很慢,但我不確定是否還有另一個做到的方式。

select sig, max(sig_count)
from (
    select sig,
        (select count(*) from event e2
        where e2.sig = e1.sig
        and e2.timestamp between date_sub(e1.timestamp,interval 7 day)
            and date_add(e1.timestamp,interval 7 day)) as sig_count
    from event e1
) t1 group by sig
order by max(sig_count) desc
limit 5

據我了解您的問題,這是一個帶where子句的聚合:

select sig, count(*) as sig_count
from table t
where timestamp >= date_sub(now(), interval 7 day)
group by sig
order by sig_count desc
limit 5;

暫無
暫無

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

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