編輯 - 我發現它不同於pivot table。因爲在我的情況下,它基於日期mysql - 爲每列用戶選擇最近的活動列
我有表與鏈接的數據。我想將每個客戶的最近活動返回列,例如用於數據挖掘目的的時間數據。
所以我有這些列在我的表:
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
但 - 我想是這樣的數據挖掘puspose
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數據)
- 這個問題有沒有更好的方法?我希望這是最佳做法。
考慮使用''GROUP_CONCAT 「軸」,而不是()。 –