我想使用每個用戶的最近(最高時間戳)記錄來計算每個地點的平均評分。(如果一個用戶最近的簽到不包括評級,我們將使用他們提供的最新評級)。
下面是我正在處理的表的例子,還有很多行沒有顯示出來
這是我目前的情況。
select t.loc_id, t.loc_name, tm.avgRating
from Table_T as t
inner join (
select loc_id, loc_name, avg(cast(rating as decimal) as avgRating, max(Timestamp) as LatestDate
from Table_T
group by loc_id, loc_name) as tm
on t.loc_id = tm.loc_id and t.timestamp = tm.LastDate
我覺得如果沒有評級的話,我需要使用CASE函式來參考較早的時間戳,但是我很難弄清楚該把它放在哪里。
如果有任何幫助,我們將不勝感激!
uj5u.com熱心網友回復:
你的方法似乎沒有考慮到用戶的最后一次評分,而只是找到了整體的平均值。你可以試試下面的方法,我們使用ROW_NUMBER按最新的時間戳排序,以確定該用戶在該地點的最新的非空評分,然后再找到每個地點的平均數。
SELECT
t.loc_id,
t.loc_name,
AVG(rating) as avgRating
FROM (
SELECT
t.loc_id,
t.loc_name,
CAST(rating as DECIMAL(12,2) ) rating,
CASE WHEN rating IS NOTNULL THEN ROW_NUMBER() OVER (PARTITION BY loc_id。 user_id ORDER BY t1. 時間戳 DESC) END as rn.
FROM[/span
表_T t1
) t
WHERE rn=1
GROUPBY
t.loc_id,
t.loc_name
或者
SELECT
t.loc_id,
t.loc_name,
AVG(rating) as avgRating
FROM (
SELECT
t.loc_id,
t.loc_name,
CAST(rating as DECIMAL(12,2) ) rating,
ROW_NUMBER() OVER (PARTITION BY loc_id。 user_id ORDER BY t1. 時間戳 DESC) as rn.
FROM[/span
表_T t1
WHERE rating is NOT NULL
) t
WHERE rn=1
GROUPBY
t.loc_id,
t.loc_name
如果這對你有用,請告訴我
。uj5u.com熱心網友回復:
你可以使用一個行編號的解決方案來解決這個問題
我假設你實際上想要的是每個位置和用戶的最新評級,而其他答案沒有給出
SELECT
loc_id,
loc_name,
AVG(CAST(rating AS decimal(18, 2)) AS avgRating,
MAX([Timestamp]) AS LatestDate
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY Loc_id, loc_name, user_id
ORDER BY [Timestamp] DESC) AS rn
FROM Table_T AS t
WHERE rating IS NOT NULL
) AS t
WHERE rn = 1 >。
GROUP BY
loc_id。
loc_name。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/311059.html
標籤:
