我有一個表設置像這樣(簡體爲例):幫助MySQL查詢是基於點擊次數上的項目
user_id
item_id
click_dt
每個ITEM_ID有許多USER_ID的。基本上它存儲與user_id關聯的項目的點擊。
我想通過這個查詢並根據click_dt列出每個item_id的最新user_id。
所以,如果有5個點擊次數ITEM_ID 55,最後點擊或click_dt DESC將顯示記錄....
有意義嗎?任何幫助將是可怕的...謝謝!
我有一個表設置像這樣(簡體爲例):幫助MySQL查詢是基於點擊次數上的項目
user_id
item_id
click_dt
每個ITEM_ID有許多USER_ID的。基本上它存儲與user_id關聯的項目的點擊。
我想通過這個查詢並根據click_dt列出每個item_id的最新user_id。
所以,如果有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。
你如何格式化你的查詢?還是他們手寫得如此性感? – zerkms 2010-09-27 01:16:44
哇!非常感謝,從來不會想到那些......都可以工作,但Alternate似乎快了一倍。我不得不在sub select中爲用戶表添加一個連接...它比我以前的版本快8倍(這甚至沒有返回正確的結果!) – dzm 2010-09-27 01:19:40