1

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

user_id
item_id
click_dt

每个 item_id 都有许多 user_id。基本上,它存储与 user_id 关联的项目的点击次数。

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

因此,如果 item_id 55 有 5 次点击,则最后一次点击或 click_dt DESC 将是要显示的记录....

有道理?任何帮助都会很棒...谢谢!

4

2 回答 2

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
于 2010-09-27T00:58:35.870 回答
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

子选择部分将为每个 item_id 提供最新点击,然后您可以将其加入原始表以检索匹配的 user_id。

于 2010-09-27T01:04:29.467 回答