sql - 从时间戳 SQL 创建队列

标签 sql oracle timestamp rank

您好,我在尝试创建表示队列的 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

此外,根据排名的要求和复杂程度,您还可以查看函数 RANKDENSE_RANK

Tim Hall 在他的文章中有一些非常好的例子,看看 http://oracle-base.com/articles/misc/analytic-functions.php

关于sql - 从时间戳 SQL 创建队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28797631/

相关文章:

SQL 语法

php - 从数据库获取数据无法正常工作

sql - Oracle、Postgres 和 SQL Server 中的字符串连接运算符

mysql - SQL FROM_UNIXTIME 不正确

python - 如何使用strptime转换微秒部分的7位时间戳字符串?

mysql - 在 "in"运算符上指定表列

mysql - 为未找到的列显示空行或 0 的其余行

oracle - 日期字符串在日期范围选择语句中不起作用

oracle - 对象不再存在

PostgreSQL:如何获取以前的插入时间戳