Question

J'ai une configuration de table comme celui-ci (par exemple simplifié):

user_id
item_id
click_dt

Chaque item_id a de nombreux années user_id. Fondamentalement, il est à stocker les clics sur les éléments, associés à un user_id.

Je veux interroger à travers cette liste et que la dernière user_id pour chaque ITEM_ID, sur la base click_dt.

Donc, s'il y a 5 clics pour item_id 55, le dernier clic ou DESC click_dt serait consigné au compte rendu ....

sens? Toute aide serait génial ... merci!

Était-ce utile?

La solution

Utilisation:

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

Autre:

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

Autres conseils

Essayez ceci:

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

La partie subselect donnera le dernier clic pour chaque ITEM_ID, puis vous pouvez rejoindre ce à la table d'origine pour récupérer le user_id correspondant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top