从时间戳创建队列 SQL
Creating a queue from timestamps SQL
您好,我在尝试创建表示队列的视图时遇到问题。它是关于候补名单中的学生试图注册课程的。我有一个 table "Waits" 属性 queue# TIMESTAMP, stundentID STRING, courseCode STRING,
由此我试图创建一个代表队列的视图。让我们用属性 courseCode STRING、studentID STRING、queue# INT 来称呼它 "Queue"。
queue# 在这种情况下将是一个数字,表示您在队列中的位置,因此每个学生的时间戳越旧,queue# 在视图中的位置就越低。
我有一个关于如何执行此操作的想法,但我不知道如何将其写成代码。
CREATE VIEW Queue
SELECT code, cid,
CASE
WHEN MIN(queue#) THEN NVL(MIN(place)) + 1
END AS place;
FROM Waits
如果有人能告诉我将我的想法转化为代码的正确方法,我将不胜感激。
如果我没理解错的话,你想根据时间戳的顺序分配等级。时间戳越旧,在 queue.
中的排名就越高
我建议使用 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
您好,我在尝试创建表示队列的视图时遇到问题。它是关于候补名单中的学生试图注册课程的。我有一个 table "Waits" 属性 queue# TIMESTAMP, stundentID STRING, courseCode STRING,
由此我试图创建一个代表队列的视图。让我们用属性 courseCode STRING、studentID STRING、queue# INT 来称呼它 "Queue"。
queue# 在这种情况下将是一个数字,表示您在队列中的位置,因此每个学生的时间戳越旧,queue# 在视图中的位置就越低。
我有一个关于如何执行此操作的想法,但我不知道如何将其写成代码。
CREATE VIEW Queue
SELECT code, cid,
CASE
WHEN MIN(queue#) THEN NVL(MIN(place)) + 1
END AS place;
FROM Waits
如果有人能告诉我将我的想法转化为代码的正确方法,我将不胜感激。
如果我没理解错的话,你想根据时间戳的顺序分配等级。时间戳越旧,在 queue.
中的排名就越高我建议使用 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