You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行SQL子查询报Subquery returned more than 1 value错误,加Top1结果全为0咨询

问题原因

  1. 你写的用于计算ElapsedSecond的子查询没有和外层主查询的当前行做关联约束,会返回和[dbo].[Log]全表行数一致的多个结果,而等号后的标量表达式位置不支持多值返回,因此触发报错。
  2. 你添加TOP 1后,子查询永远只返回全表第一行的计算结果,所以所有行的ElapsedSecond都是同一个值,不符合业务预期。

解决方案

直接在主查询层面使用窗口函数计算即可,不需要嵌套子查询:

SELECT [Id] 
      ,[LogTime]
      ,[StartTime]
      ,[Source]
      ,[Type]
      ,[User]    
      ,ABS(ISNULL(DATEDIFF(second, LEAD(StartTime) OVER (PARTITION BY [Source], [User] ORDER BY StartTime), StartTime), 0)) AS ElapsedSecond
FROM  [dbo].[Log]

逻辑说明

LEAD窗口函数会在当前行的执行上下文中,自动取相同Source、相同User分组内,按StartTime升序排序后的下一行的StartTime值,直接计算时间差即可,不存在多值返回问题,计算结果和你给出的期望输出完全匹配。

内容的提问来源于stack exchange,提问作者RjLearn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 14:06:03