我正在與SAP HANA一起工作。以下是我的計算視圖的一些示例數據。我期望的結果是計算列最後一位老師。SQL計算列
我有2名學生。有一個學生最後一次見過老師的日期。對於每個學生,我想用sql語句計算上次看到的老師。任何想法?
我正在與SAP HANA一起工作。以下是我的計算視圖的一些示例數據。我期望的結果是計算列最後一位老師。SQL計算列
我有2名學生。有一個學生最後一次見過老師的日期。對於每個學生,我想用sql語句計算上次看到的老師。任何想法?
在MySQL,目前不支持窗口的功能,你可以試試這個:
SELECT
t1.*,
t3.TeacherID AS last_teacher
FROM yourTable t1
INNER JOIN
(
SELECT studentID, MAX(LastSeen) AS max_last_seen
FROM yourTable
GROUP BY studentID
) t2
ON t1.studentID = t2.studentID
INNER JOIN yourTable t3
ON t2.studentID = t3.studentID AND
t2.max_last_seen = t3.LastSeen;
使用窗口功能,我們可以用一個做掉聯接和略微簡化爲以下幾點:
SELECT
t1.StudentID,
t1.TeacherID,
t1.LastSeen,
t2.TeacherID AS last_teacher
FROM
(
SELECT StudentID, TeacherID, LastSeen,
MAX(LastSeen) OVER (PARTITION BY StudentID) AS max_last_seen
FROM yourTable
) t1
INNER JOIN yourTable t2
ON t1.StudentID = t2.StudentID AND
t1.max_last_seen = t2.LastSeen;
請嘗試以下查詢。通過爲每個studentIdGroup LastSeen
列
Select * from
(
select
ROW_NUMBER() OVER (PARTITION BY studentId ORDER BY LastSeen desc) as rn,
studentId,
TeacherId
from yourTable
)
where rn = 1;
該功能組每studentId
和命令行:
SELECT *
FROM table
WHERE last_seen IN (
SELECT Max(last_seen)
FROM table
GROUP BY student_id
)
這將返回每個記錄,可能來自每個學生,這恰好有最後一次看到的時間,這是給定學生的最大時間。可能不是OP想要的。 –
可以使用Row_Number()
功能通過列oracle
分貝這樣得到LastRecord。然後你可以使用選擇每組第一排where語句where rn = 1
UPDATE 如果你想選擇表中的所有行,那麼你就可以加入你的表這個選擇的語句是這樣的:
select * from yourTable t
join
(
Select * from
(
select
ROW_NUMBER() OVER (PARTITION BY studentId ORDER BY LastSeen desc) as rn,
studentId,
TeacherId
from yourTable
)
where rn = 1
) s
on t.studentId = s.studentId;
@TimBiegeleisen,感謝您的關注,我更新了我的答案 –
請。標記DBMS(MySQL,MS SQL Server,Oracle等),您正在使用。 –
添加一些示例數據和所需的結果。 –
延遲窗口函數,如果你使用的是支持它的dbms – GurV