0

我如何选择一个,最近的NID,每 7 天,每UID,从今天开始倒计时。

如果今天是 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 可以解决问题;但我不知道从哪里开始。

更新

根据最佳答案,这是有效的查询:

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 
4

2 回答 2

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
于 2012-07-12T04:39:45.497 回答
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

可能这可以解决您的问题。尝试这个

于 2012-07-12T05:24:28.053 回答