【问题标题】:find every 5th record from table从表中查找每 5 条记录
【发布时间】:2025-12-15 18:15:02
【问题描述】:

ABC有n条记录。 编写一个查询以从表中选择每 5 条记录。

例如,一个表中有 30 行。 所以查询应该从表中输出第 5、10、15、20、25 和 30 条记录。

我尝试了ROW_NUMBER OVER (ORDER BY id ),但收到了消息:-

来自 SQL 服务器 IML 的消息(消息 156,级别 15,状态 2):

关键字“OVER”附近的语法不正确。

我正在使用 Sybase 数据库。

【问题讨论】:

  • 你如何确定哪一行是第 5 行?
  • ROW_NUMBER() OVER 在 SYBASE 上不起作用!
  • @Parado : 我该如何解决这个问题:(
  • @avinashse 我添加了解决方案。

标签: sql sybase


【解决方案1】:

您需要定义顺序以获取每 5 行。例如,它可以是 PRIMARY KEY ID 或类似的东西

select * from
(
  select ABC.*, ROW_NUMBER() OVER (ORDER BY id) as RN from ABC
) t1
where RN % 5 = 0

【讨论】:

  • 我已更改查询。立即尝试。
  • 显示 agani Message from SQL server IML (msg 156, level 15, state 2): Incorrect syntax near the keyword 'OVER'. 错误
  • 确保ROW_NUMBER() OVER 带有括号。这是一个函数。
  • 我正在查询 :- select * from (select test_sal.*, ROW_NUMBER() OVER(ORDER BY id) as RN from test_sal) where RN % 5 = 0; 得到同样的错误
【解决方案2】:

这不是 SQL 的工作方式。我不确定哪一列会给你想要的东西,但你不应该知道或关心数据的存储方式或排序可能是什么。

您需要找出一个 WHERE 子句来满足您的需求。某些取决于顺序的东西是错误的。

【讨论】:

  • 如果 sypace dan 计算一个行号(大多数 sql 可以),您可以使用它在上一个查询的选择中过滤 (%5)。 Stnadard 例如用于分页等。请参阅 valex 的回答。
【解决方案3】:

试试这个

  select rn, col_list from (select rownum rn, col_list from tab_name)
  where rn=N;

其中 N 是您想要的行号。

【讨论】:

    【解决方案4】:

    试试这个方法。

    使用标识列创建临时表。

    select 
    id = identity(8),
    column1,....
    into #ABC
    from ABC
    

    选择模数:

    select * from #ABC
    where  id % 5 = 0
    

    【讨论】: