我做了一个查询:
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/