2012-07-12 57 views
0

如何從今天開始計算,每7天選擇一個,最近的NID,從UID開始計算。按多列和時間跨度對MYSQL結果進行分組

如果今天是7月11日見下表

+-----+------------+-----+ 
| NID | timestamp | UID | 
+-----+------------+-----+ 
| 1 | 1341719851 | 8 | //July 7 
| 2 | 1341115051 | 8 | //July 1 
| 3 | 1341547051 | 8 | //July 6 
| 4 | 1341719851 | 8 | //July 8 
| 5 | 1341979051 | 8 | //July 11 
| 6 | 1341806251 | 9 | //July 9 
| 7 | 1341460651 | 9 | //July 5 
| 8 | 1341892651 | 9 | //July 10 
+-----+------------+-----+ 

將輸出這樣的:

+-----+------------+-----+ 
| NID | timestamp | UID | 
+-----+------------+-----+ 
| 2 | 1341115051 | 8 | //July 1 
| 5 | 1341979051 | 8 | //July 11 
| 8 | 1341892651 | 9 | //July 10 
+-----+------------+-----+ 

在過去7天,最近NID爲每個用戶是'5''8',在前7天,最近的NID'2',依此類推......

我假設, Group By將會訣竅;但我不知道從哪裏開始。

UPDATE

這是工作的查詢的基礎上,最多的回答:

SELECT nid, timestamp, uid, weeks_ago 
FROM (
    SELECT nid, timestamp, uid, FLOOR(
     (UNIX_TIMESTAMP()- timestamp)/604800 
    ) weeks_ago 
    FROM `table` 
    ORDER BY timestamp DESC 
) x 
GROUP BY uid, weeks_ago 
+0

'timestamp'列是MySQL'TIMESTAMP'數據類型嗎? 這是*滾動* 7天或7天=一週?你想要所有的結果還是僅僅在前7天? – 2012-07-12 04:32:44

+0

這是一個Unix時間戳......我不知道我是否理解你的權利。這是滾動7天,即從今天0-7天,從今天起8-14天,15-21 ...我需要所有結果,而不僅僅是前7天。 – timofey 2012-07-12 04:54:12

回答

3
select nid, max(timestamp), uid, weeks_ago 
from (select nid, timestamp, uid, floor(datediff(now(), from_unixtime(timestamp))/7) weeks_ago 
     from mytable) x 
group by nid, uid, weeks_ago 
+0

幾乎在那裏。它輸出所有列,不按每個uid的weeks_ago分組。 – timofey 2012-07-12 05:19:30

+0

對這個答案進行了一些調整(查看我的更新,上面),查詢工作!謝謝! – timofey 2012-07-12 06:05:25

0
select * from (
    (
     select nid, uid,timestamp,floor(datediff(now(), from_unixtime(timestamp))/7) as weeks,from_unixtime(timestamp) as Dt from test t1 order by dt desc limit 0,2) 
Union 
    (
    select nid, uid,timestamp, 
    floor(datediff(now(), from_unixtime(timestamp))/7) as weeks,from_unixtime(timestamp) as Dt 
from test t2 group by weeks having weeks>0 order by dt asc limit 0,1 
    ) 
    ) t4 

可能是這樣解決您的問題。試試這個