首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MS SQL SERVER LAG

MS SQL SERVER LAG
EN

Stack Overflow用户
提问于 2018-12-28 22:21:32
回答 2查看 118关注 0票数 1

我正在尝试将一个条件应用于SQL查询中的LAG。有人知道怎么做吗?

以下是查询:

代码语言:javascript
复制
  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%'

910不正确。

EN

回答 2

Stack Overflow用户

发布于 2018-12-28 22:30:29

我会在您的case语句中添加另一个条件。即

代码语言:javascript
复制
...
CASE 
   WHEN [EventType] = '20001' AND DATEDIFF(DAY,[ArrivalTime],LAG([ArrivalTime]) over (ORDER BY [CardHolderID], [ArrivalTime])) > 0
   THEN NULL
   WHEN [EventType] = '20001'
   THEN DATEDIFF(minute,Lag([ArrivalTime],1) OVER(ORDER BY [CardHolderID], [ArrivalTime]), [ArrivalTime])
   ELSE NULL
票数 0
EN

Stack Overflow用户

发布于 2018-12-29 00:01:04

在我看来,延迟只需要按日期划分(以及其他一些字段)。

如果先前日期在另一个分区中,

则LAG将返回NULL,

代码语言:javascript
复制
 then the datediff will return NULL.
代码语言:javascript
复制
SELECT 
 CONCAT(holder.FirstName+' ', holder.LastName) AS employee,
 CAST(repev.ArrivalTime AS DATE) AS [date],
 CAST(SWITCHOFFSET(repev.ArrivalTime,'+02:00') AS TIME)  as [time],
 IIF(repev.EventType = 20001, 'ENTRY', 'EXIT') AS Action,
 (CASE WHEN repev.EventType = 20001
  THEN DATEDIFF(minute, LAG(repev.ArrivalTime) 
                        OVER (PARTITION BY repev.EventClass, repev.CardholderID, CAST(repev.ArrivalTime AS DATE) 
                              ORDER BY repev.ArrivalTime), repev.ArrivalTime)
  END) AS OutTime
FROM [CCFTEvent].[dbo].[ReportEvent] AS repev
LEFT JOIN [CCFTCentral].[dbo].[Cardholder] AS holder ON holder.FTItemID = repev.CardholderID
WHERE repev.EventClass = 41
  AND holder.FirstName LIKE 'Leeann%'

在db<>fiddle 上测试

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53959970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档