Помогите с запросом MySQL, который основан на количестве кликов на элементе
-
25-09-2019 - |
Вопрос
У меня есть установка таблицы, как это (упрощенная например):
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.
Не связан с StackOverflow