sql - 子查询在将其与不同表中的下一行进行比较时应返回 Null
问题描述
我的 T-SQL 子查询返回超过 1 行:
WITH ReportView AS
(
SELECT
PMA.AssetName, ReleaseDt, ExpiresDt, TicketNumber, ChangeDt,
ChangeReasonCd,
ROW_NUMBER() OVER (PARTITION BY PMA.AssetName, ReleaseDt, ExpiresDt, TicketNumber, ChangeReasonCd
ORDER BY ChangeDt ASC) AS ROW_NUM
FROM
pmm.pmmreleaserequest PRR WITH (nolock)
LEFT JOIN
pmm.PmmManagedAccount AS PMA WITH (nolock) ON PRR.ManagedAccountID = PMA.ManagedAccountID
LEFT JOIN
dbo.ManagedEntity AS ME WITH (nolock) ON PRR.ManagedSystemID = ME.ManagedEntityID
LEFT JOIN
dbo.Asset AS AST WITH (nolock) ON ME.AssetID = AST.AssetID
LEFT JOIN
pmm.PmmLogChange AS PLC WITH (nolock) ON PRR.ManagedAccountID = PLC.ManagedAccountID
AND PRR.ExpiresDt < PLC.ChangeDt
)
SELECT *
FROM ReportView
WHERE ROW_NUM = 1
如何比较 ChangeDt 的当前行与 ReleaseDt 的下一行。Example ChangeDt(current row) < ReleaseDt(Next row) 我怎样才能把这个条件。
解决方案
这是如何row_num
定义的:
ROW_NUMBER() OVER (PARTITION BY PMA.AssetName, ReleaseDt, ExpiresDt, TicketNumber, ChangeReasonCd
ORDER BY ChangeDt ASC) AS ROW_NUM
它将为每个列中的唯一组合返回一行PARTITION BY
。PMA.AssetName
即每/ ReleaseDt
/ ExpiresDt
/ TicketNumber
/一行ChangeReasonCd
。
我希望会有不止一种这样的组合。
如果您只想要一行,请使用SELECT TOP (1)
or OFFSET/FETCH
。
推荐阅读
- c# - 无法获取当前用户或授权
- google-maps - 电子邮件中的静态地图
- javascript - Angular:克隆 ng-content 元素及其功能
- angular - 获取对象后更新角度http post方法的对象
- r - bedr:在 R 中检查路径的二进制可用性全部失败
- node.js - Asp.net Angular 模板应用程序 Npm 更新不起作用
- qt - 如何在 IMX6Q 上为 Qt 启用 EGLFS i.Mx6 QPA?
- spring-boot - 出现异常时重启 Hazelcast Jet (v0.4)
- batch-file - 批量覆盖ftp服务器文件
- linux - 詹金斯奴隶问题 - 无效的流标头:099EACED