编辑-我发现它与数据透视表不同。因为就我而言,它基于日期
我有链接数据的表。我想将每个客户的最新活动返回到列中,例如用于数据挖掘目的的时间数据。
所以我的表中有这些列:
id_user | item_id | date
1 | 2 | 2016-11-10
1 | 3 | 2016-9-9
1 | 23 | 2016-8-8
1 | 21 | 2016-6-6
1 | 5 | 2016-7-7
1 | 4 | 2016-10-10
2 | 3 | 2016-9-9
2 | 4 | 2016-10-10
2 | 21 | 2016-5-4
3 | 4 | 2016-10-10
3 | 4 | 2016-9-9
首先- 我想过滤数据以获得“最近 5 ”活动。然后我想出了这段代码
set @num := 0, @group := '';
select x.`id_user`, x.`item_id`, x.`date`
from
(
select `id_user`, `item_id`, `date`,
@num := if(@group = `id_user`, @num + 1, 1) as row_number,
@group := `id_user` as dummy
from ratings
order by `id_user`, `date` desc, `item_id`
) as x,
where x.row_number <= 5
ORDER BY x.`user_id`, x.date DESC;
这些代码给了我这张表:
id_user | item_id | date
1 | 2 | 2016-11-10
1 | 4 | 2016-10-10
1 | 3 | 2016-9-9
1 | 23 | 2016-8-8
1 | 5 | 2016-7-7
2 | 4 | 2016-10-10
2 | 3 | 2016-9-9
2 | 21 | 2016-5-4
3 | 4 | 2016-10-10
3 | 4 | 2016-9-9
但是- 我想要这样的数据挖掘目的
Id_user | item_1 | Item_2 | Item_3 | Item_4 | Item_5
1 | 2 | 4 | 3 | 23 | 5 |
2 | 4 | 3 | 21 | NULL | NULL |
3 | 4 | 4 | NULL | NULL | NULL |
你明白我的想法了吗?对不起,如果我不能解释清楚,希望你能明白我想要什么。
问题
- 如何针对这些问题进行 SQL 查询?(目前我从 MySQL 数据库中获取 RAW 数据)
- 有没有更好的方法来解决这个问题?我希望这是一个最佳实践。