[英]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.