0

今日からカウントを開始してNID、7日ごとに最新のものを1つ選択するにはどうすればよいですか。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'であり、以下同様です。

私は、GroupByがそのトリックを行うと思います。しかし、どこから始めればよいのかわかりません。

アップデート

これは、トップアンサーに基づいて機能したクエリです。

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 に答える