【问题标题】:Random record selection - VMS / RDB随机记录选择 - VMS / RDB
【发布时间】:2011-06-28 22:12:55
【问题描述】:

有人要求我使用 SQL 语句从托管在 VMS 上的 Oracle RDB 上的数据库中的数据表中检索随机选择的任意数量的行。

在 MS SQL 中,它只是:

SELECT TOP 5 * 
FROM MyTable  
ORDER BY NEWID()   

但我找不到 RDB/VMS 的等效方法。

“正确的”Oracle 将是:

ORDER BY dbms_random.VALUE

但是,这似乎在 VMS 上的 RDB 中不受支持。

任何见解都将不胜感激。

【问题讨论】:

    标签: sql vms oracle-rdb


    【解决方案1】:
    SELECT *
    FROM MyTable 
    ORDER BY NEWID()
    LIMIT to 5
    

    【讨论】:

    • 我怀疑您是否可以在 RDB 中拥有一个名为 NEWID() 的列。
    • NEWID() 是一个 MS SQL 函数,用于生成新的 GUID。如果使用每一行的评估创建一个新的 GUID,则它们的排序顺序将是伪随机的。由于 CPU 负载,这不是一个好方法,但效果很好。但是,它在 VMS 上的 RDB 中不可用。我把它放在帖子中是为了展示我想要完成的事情。
    【解决方案2】:

    我不知道执行此操作的“RDB 方式”,但如果记录具有顺序 ID,则找出最高编号的 ID,然后通过脚本生成要获取的随机 ID 列表。比如:

    SELECT TOP 1 FROM mytable ORDER BY id DESC;
    

    然后在 Python 中:records = random.sample(range(topId), 5)

    【讨论】:

      猜你喜欢
      • 2011-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-31
      • 2011-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多