2011-10-07 82 views
0

我有一些我想要檢索的數據,但我希望按特定秒數分組。例如,如果我的表看起來像這樣:按時間段分組的結果

| id | user | pass | created | 

created列INT並持有時間戳(從1970年的秒數)。

我想要在上個月和當前日期之間創建的用戶數,但按照7*24*3600(一週)顯示他們的分組數。因此,如果在該範圍內有1000個新用戶,讓他們顯示每週註冊多少次(第一週100次,第二週450次,第三次50次,第四周400次 - 如此)。

我試着通過created/7*24*3600分組的結果,但不工作。

我的查詢應該怎麼樣?

+0

什麼樣的列的是'created'? –

+0

對不起,忘了提及它。它是INT,它在幾秒鐘內擁有一個時間戳。 –

回答

2

您需要使用整數除法div否則結果將變成真實的,並且週中沒有一個會解析爲相同的值。

SELECT 
    (created div (7*24*60*60)) as weeknumber 
    , count(*) as NewUserCount 
FROM users 
WHERE weeknumber > 1 
GROUP BY weeknumber 

參見:http://dev.mysql.com/doc/refman/5.0/en/arithmetic-functions.html

+0

謝謝,您的解決方案爲我提供了一個重要的信息:'div' –

+1

+1但考慮到'div'是特定於mysql的語法。使用SQL2003標準函數'floor()'也可以達到同樣的效果。 –

+0

@XaviLópez,在SQL服務器中,如果兩個操作數都是整數,那麼'/'操作符會返回一個trucated整數。 – Johan

1

好這裏是可能的選項,你可以嘗試:

GROUP BY DAY

select count(*), DATE_FORMAT(created_at,"%Y-%m-%d") as created_day FROM widgets GROUP BY created_day 

GROUP BY MONTH

select count(*), DATE_FORMAT(created_at,"%Y-%m") as created_month FROM widgets GROUP BY created_month 

GROUP BY YEAR

select count(*), DATE_FORMAT(created_at,"%Y") as created_year FROM widgets GROUP BY created_year 
2

你必須保持整數部分只是分工。你可以用floor()函數來完成。

你試過select floor(created/604800) as week_no, count(*) from users group by floor(created/604800)

我假設你已經有了「上個月創建的選擇用戶」部分。

+0

謝謝。我的問題是我使用'/'運算符來執行分區,而不是'div'。但主要想法就像你的查詢。 –