【问题标题】:How do I get just the Nth row of data from sybase?如何从 sybase 获取第 N 行数据?
【发布时间】:2016-06-22 14:36:12
【问题描述】:

我有一个表,每个用户都有多行。每个用户将拥有相同数量的行,但每个用户的行 id 都不同,那么我如何获取给定用户的第 N 行?

假设按 user_id、row_id 子句进行排序,因此可以保证任何给定用户的顺序一致。

这是我正在使用的 sybase 12。

【问题讨论】:

  • 关系型数据库没有原生顺序的概念。询问表中的第 n 个项目是一个无效问题,相反,您必须始终使用“order by”子句来询问您的数据,我认为这不是您在此处指定的内容。
  • 我会更新问题...
  • @Cruachan: 错了,看我的回答
  • @vol7ron:@cruashan 所说的完全正确 - 如果没有 order by 子句,您无法确定返回行的顺序。

标签: sql sybase


【解决方案1】:

如果您使用的是 Sybase SQL Anywhere(不清楚您使用的是 SA 还是 ASE),请查看 select 语句 herestart attop 子句。例如:

select top 1 start at 7 * from mytable order by user_id, row_id

将检索第 7 行。

【讨论】:

    【解决方案2】:

    SYBASE 应该有窗口函数

    SELECT * 
    FROM   ( select row_number() over (order by user_id, row_id) as row, bar.*
             from   bar
           ) foo
    WHERE  foo.row = 7
    

    【讨论】:

    • 这适用于任何地方的 sybase,而不是 Sybase ASE,不幸的是,答案不适用于该问题。 ASE 不支持 OLAP 函数。
    • 您是否将“sybase 任何地方”与 SQL Anywhere 混淆了?分析功能(第一个链接)应该在两者中;不过,我承认,我对 SYBASE 的了解是有限的。不过,作者从未说明他使用的是 ASE 还是 SA
    • Sybase IQ 不是 Sybase ASE...sybase 东西太乱了,OP 说 Sybase 12(即 ASE)
    【解决方案3】:

    如果您可以将 seq_id 列添加到每个 user_id 从 0 开始的表中。您可以通过此列查询。

    【讨论】:

    • @stu: 你能添加另一个表(键值是你现有表的 user_id 和 row_id 的组合),上面有 seq_id 吗?除非您可以在某处添加某种数据,否则您将不走运,因为您的数据库设计不足以满足您的需求。
    • 好吧,这有点糟糕。更改这些表(其中有很多)将涉及修复许多遗留应用程序,这就是为什么它对于我的小项目来说并不是一个真正的选择。我想出的唯一一件事是从选择类型的事物中进行选择,其中我确实选择了前 3 名,然后在此之外进行选择前 1 名,顺序颠倒。非常丑陋,但它会起作用。我希望有更简单的东西。它会是这样的: select field from (select top 1 field from (select top 3 field from table) order by field) order by field desc
    猜你喜欢
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2023-02-02
    • 2011-05-24
    相关资源
    最近更新 更多