我有一个像这样的表设置(例如简化):
user_id
item_id
click_dt
每个item_id都有很多user_id。基本上它存储与user_id相关联的项目的点击次数。
我想查询一下,并根据click_dt列出每个item_id的最新user_id。
因此,如果item_id 55有5次点击,则最后一次点击或click_dt DESC将是要显示的记录....
有意义吗?任何帮助都会很棒......谢谢!
答案 0 :(得分:1)
使用:
SELECT x.*
FROM YOUR_TABLE x
JOIN (SELECT t.item_id,
MAX(t.click_dt) AS max_date
FROM YOUR_TABLE t
GROUP BY t.item_id) y ON y.item_id = x.item_id
AND y.max_date = x.clicked_dt
替代:
SELECT x.item_id,
x.user_id,
x.click_dt
FROM (SELECT t.item_id,
t.user_id,
t.click_dt,
CASE
WHEN @item = t.item_id THEN @rownum := @rownum + 1
ELSE @rownum := 1
END AS rk,
@item := t.item_id
FROM YOUR_TABLE t
JOIN (SELECT @rownum := 0, @item := 0) r
ORDER BY t.itemid, click_dt DESC) x
WHERE x.rk = 1
答案 1 :(得分:0)
试试这个:
SELECT user_id,item_id,click_dt FROM
(
SELECT MAX(click_dt) AS LastClick_dt,item_id FROM aTable
GROUP BY item_id
) As LastClick
INNER JOIN aTable
ON aTable.itemid = LastClick.item_id
AND aTable.click_dt = LastClick.LastClick_dt
subselect部分将为每个item_id提供最新的单击,然后您可以将其连接到原始表以检索匹配的user_id。