【发布时间】:2018-12-28 14:21:32
【问题描述】:
我正在尝试在 SQL 查询中对LAG 应用条件。有谁知道如何做到这一点?
这是查询:
SELECT CONCAT([FirstName],' ',[LastName]) AS employee,
CAST([ArrivalTime] AS DATE) AS date,
CAST(DATEADD(hour,2,FORMAT([ArrivalTime],'HH:mm')) AS TIME) as time,
CASE [EventType]
WHEN 20001 THEN 'ENTRY'
ELSE 'EXIT'
END AS Action,
OutTime =
CASE [EventType]
WHEN '20001'
THEN DATEDIFF(minute,Lag([ArrivalTime],1) OVER(ORDER BY [CardHolderID], [ArrivalTime]), [ArrivalTime])
ELSE
NULL
END
FROM [CCFTEvent].[dbo].[ReportEvent]
LEFT JOIN [CCFTCentral].[dbo].[Cardholder] ON [CCFTEvent].[dbo].[ReportEvent].[CardholderID] = [CCFTCentral].[dbo].[Cardholder].[FTItemID]
WHERE EventClass = 41
AND [FirstName] IS NOT NULL
AND [FirstName] LIKE 'Leeann%'
我遇到的问题是,当两个不同日期之间的时间相减时,两个不同日期之间的相减时间也必须是NULL。
910 不正确。
【问题讨论】:
-
您的两张图片看起来都像查询结果。如果您显示您的源数据会更有帮助。
-
你不需要
[FirstName] IS NOT NULL和[FirstName] LIKE 'Leeann%'。如果FirstName是LIKE 'Leeann%',那么它将自动是NOT NULL。此外,您应该指出变量来自哪些表。如果FirstName来自Cardholder,那么您不妨将条件移至JOIN并将其更改为INNER JOIN。此外,放置变量将有助于您将来更好地了解查询流程。 -
您的输入是什么,您期望最终输出是什么?您的两张图片都显示相同的内容。我假设
ArrivalTime是datetime数据类型?什么版本的 SQL Server? -
是什么让 910 不正确? 917也不对吗?
-
感谢您的回复。 910 是不正确的,因为它在两个不同的日期之间进行计算,当发生这种情况时,我希望它为 NULL。我正在尝试计算员工不在大楼内的总时间。
标签: sql sql-server case lead