您好,我在尝试创建表示队列的 View 时遇到问题。这是关于等待名单上的学生试图注册类(class)的故事。我有一个表“Waits”,其属性为queue# TIMESTAMP、studentID STRING、courseCode STRING、
由此,我尝试创建一个代表队列的 View 。我们将其称为“队列”,属性为 courseCode STRING、studentID STRING、queue# INT。
在这种情况下,queue# 将是一个数字,表示您在队列中的位置,因此每个学生的时间戳越旧,queue# 在 View 中的位置就越靠前。
我知道如何做到这一点,但我不知道如何用代码写下来。
CREATE VIEW Queue
SELECT code, cid,
CASE
WHEN MIN(queue#) THEN NVL(MIN(place)) + 1
END AS place;
FROM Waits
如果有人能告诉我一种正确的方法来将我的想法表述为代码,我将不胜感激。
最佳答案
如果我理解正确的话,您希望根据时间戳顺序分配排名。时间戳越旧,队列中的排名就越高。
我建议使用ANALYTIC函数。为了简单起见,您可以使用 ROW_NUMBER
。
例如,
SELECT code, cid, ROW_NUMBER() OVER(ORDER BY timestamp_column) rn FROM waits
此外,根据排名的要求和复杂程度,您还可以查看函数 RANK
和 DENSE_RANK
。
Tim Hall 在他的文章中有一些非常好的例子,看看 http://oracle-base.com/articles/misc/analytic-functions.php
关于sql - 从时间戳 SQL 创建队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28797631/