我有一个表设置这样的(简化例如):

user_id
item_id
click_dt

每个ITEM_ID有许多USER_ID的。基本上它是存储关于项的点击,关联到USER_ID。

我想通过这个查询,仅列出了最新的user_id每个ITEM_ID,基于click_dt。

所以,如果有5个点击次数ITEM_ID 55,最后点击或click_dt DESC将是记录显示....

有意义吗?任何帮助将是真棒...谢谢!

有帮助吗?

解决方案

使用:

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

其他提示

尝试这种情况:

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

子选择部分将给予每个ITEM_ID最新的点击,然后你就可以加入这个原始表检索匹配USER_ID

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top