1

次のようなテーブル設定があります(たとえば簡略化されています):

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 が表示されるレコードになります....

わかる?どんな助けでも素晴らしいでしょう...ありがとう!

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 に答える