sql - MS SQL 服务器分页

标签 sql sql-server

我做了一个查询:

SELECT DISTINCT m.logID 
FROM Monitor_data m 
inner join Monitor_object o on (o.objID = m.domainID)
inner join Monitor_event e on (e.mainID = m.logID)
WHERE (o.name = @objName
and m.service = @service
and e.statement = @statement
and m.start >= @start
and m.end <= @end)

这让我可以得到一些 id (VARCHAR(50))。但是,现在我想进行分页,所以我需要修改该查询。不幸的是,我不能使用 LIMIT 和 OFFSET ...我可以使用 ROW_NUMBER 但我不知道如何使用:/获得与第 n 行到第 m 行对应的结果会很棒。因此,我将能够轻松地创建一个分页过程。

有人可以帮助我吗? 谢谢。

最佳答案

试试这个查询:

select logID from (
    SELECT DISTINCT m.logID,
                    ROW_NUMBER() over (order by m.start) rn
    FROM Monitor_data m 
    inner join Monitor_object o on (o.objID = m.domainID)
    inner join Monitor_event e on (e.mainID = m.logID)
    WHERE (o.name = @objName
           and m.service = @service
           and e.statement = @statement
           and m.start >= @start
           and m.end <= @end)
) a where rn between (m, n) --here you provide values for limits for rows to return

上面的查询是基于 SQL Server 中的 ROW_NUMBER 函数,这需要一些排序,所以我假设 m.start 会提供一个顺序(我认为它是开始日期或者什么 :))。

关于sql - MS SQL 服务器分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51173376/

相关文章:

c# - 如何在SQL中使用同一表联接名称?

c# - 如何从我的应用程序处理 SQL 键值表?

sql - SPROC 完成执行后如何触发触发器?

php - MySQL中如何使用不同表的数据获取相应的记录

SQL Server 使用外键创建表的不同方式

java - jdbc 连接到 SQL Server

sql - 如何以特定格式显示sql查询

mysql - 如果条件为 true 则运行 MySQL 查询,否则运行另一个查询

sql - 如何列出不存在的项目?

SQL Server 索引中有两列但只查询一列