执行子查询时出现以下错误
子查询返回了多个值。当子查询跟随=,!=<lt;=>gt;=或者当子查询用作表达。
有人能告诉我哪里做错了吗。当我尝试在查询中使用Top 1时,我得到了所有行的ElapsedSecond =0
。
这是我的查询
SELECT [Id]
,[LogTime]
,[StartTime]
,[Source]
,[Type]
,[User]
,ElapsedSecond =
(SELECT
ABS(ISNULL(DATEDIFF(second, nextStartTime, StartTime), 0)) AS Elapsedsecond
FROM
(
SELECT starttime,
LEAD(StartTime) OVER ( Partition by [Source], [User] ORDER BY StartTime)
AS nextStartTime
from [dbo].[Log]
) l
)
FROM [dbo].[Log]
预期输出应为
Id | 日志时间 | 开始时间源类型 | 用户 | 运行秒||||
---|---|---|---|---|---|---|---|
1 | 2021-02-24 01:15:44.647 | P | I>abc | ||||
2 | 2021-02-24 01:15:46.647 | 2021-02401:15:46.647 | |||||
3 | 2021-02-24 01:15:48.647 | P | E | abcd0 | |||
4 | 2021-02-24 01:15:50.647 | D | efg | 0 | |||
5 | 2021-02-24 01:15:52.647 | C | Scde0 |
错误的原因是您没有将子查询与外部查询关联起来,以确保每行只有一个值。但是,我认为您可以使用派生表子查询而不是关联子查询来实现所需的功能。当然,以下所提供的数据会产生所需的结果。
SELECT
[Id]
, [LogTime]
, [StartTime]
, [Source]
, [Type]
, [User]
, ABS(ISNULL(DATEDIFF(second, nextStartTime, StartTime), 0)) AS Elapsedsecond
FROM (
SELECT Id, LogTime, StartTime, [Source], [Type], [User]
, LEAD(StartTime) OVER (Partition by [Source], [User] ORDER BY StartTime) AS nextStartTime
FROM dbo.[Log]
) X
ORDER BY id;