2015-08-21 76 views
0
id  modid userid timemodified FROM_UNIXTIME(timemodified,'%d-%m-%Y')  
410  32  46  1438971403  03-08-2015 
411  32  46  1438971403  03-08-2015 
412  66  977  1438971403  07-08-2015 
412  66  977  1438971403  07-08-2015 
413  67  34  1438971423  07-08-2015 
414  68  16  1438971424  07-08-2015 
415  132  23  1438972154  07-08-2015 
416  134  2  1438972465  08-08-2015 
417  115  2  1438996430  08-08-2015 
418  130  977  1438996869  08-08-2015 

我從今天的日期計算得到了這個查詢框架最後4周前。現在,我想單獨向用戶展示4周,例如week1,week2,week3 & week4,它可以是列明智或行明智,這將是最好的。如何在MySQL中每週分組數據?

In detailed, from the above query, I need to separate data from week1 to week4,like 

       Week4 : No user 
       Week3 : 2 users (2,977) 
       Week2 : 4 users (16, 23, 34, 977) 
       Week1 : 1 user (46) 

SET @unix_four_weeks_ago = UNIX_TIMESTAMP(curdate()) - 2419200; 

SELECT *,FROM_UNIXTIME(timemodified,'%d-%m-%Y') FROM mod_users WHERE timemodified >= @unix_four_weeks_ago 
+0

你的問題對你來說可能很明顯,但我真的不想你在這裏完成的任務。你能把它分解得更多嗎?解釋情況和數據是什麼。 – Maxime

+0

Maxime - 我需要將week1到week4的數據分開。 –

+0

08年3月8日到8月8日,只有5天。你的數據如何在3周內分裂? – Maxime

回答

0

我的猜測是你想根據timemodified列每週拆分用戶數。我會使用WEEK()函數來做到這一點。

下面的SQL將增加一個weeknumber列,以確定週數:

SELECT WEEK(timemodified) weeknumber, dates.* 
FROM dates 

然後,如果你想獲得不同的用戶數,你可以簡單地使用下面的SQL:

SELECT WEEK(timemodified) weeknumber, COUNT(DISTINCT(userid)) users_count 
FROM dates 
GROUP BY weeknumber 

您還可以添加一個WHERE子句,以便只按照您的意願獲取特定的星期。所以,要從23-08-2015獲得最後4周,我會這樣做:

SELECT WEEK(timemodified) weeknumber, COUNT(DISTINCT(userid)) users_count 
FROM dates 
WHERE WEEK(timemodified) <= WEEK('2015-08-23') 
    AND WEEK(timemodified) > (WEEK('2015-08-23') - 4) 
GROUP BY weeknumber 

讓我們希望我假設正確。 :-)

+0

Maxime - 我沒有得到它顯示NULL的星期數 –

相關問題