Sql 仅显示5分钟内多个条目的第一条记录
我有一个查询,它以集合的形式显示行,每个行集合将有两个由1和2标识的记录。基本上是进进出出的时间。有时用户会多次打孔数据。例如,当他打“进去”时,他可能会打几次以确保安全,但实际上他应该只打一次。在打“出局”时,他可能会再打几次以确保安全,但实际上他应该只打一次。在每个条目上捕获时间。我需要将下面的查询配置为仅获取多个条目的第一次条目或记录。更准确地说,如果在5分钟内有多个条目,则仅显示第一条记录,而忽略特定5分钟内的其余记录Sql 仅显示5分钟内多个条目的第一条记录,sql,sql-server,Sql,Sql Server,我有一个查询,它以集合的形式显示行,每个行集合将有两个由1和2标识的记录。基本上是进进出出的时间。有时用户会多次打孔数据。例如,当他打“进去”时,他可能会打几次以确保安全,但实际上他应该只打一次。在打“出局”时,他可能会再打几次以确保安全,但实际上他应该只打一次。在每个条目上捕获时间。我需要将下面的查询配置为仅获取多个条目的第一次条目或记录。更准确地说,如果在5分钟内有多个条目,则仅显示第一条记录,而忽略特定5分钟内的其余记录 SELECT TransactionID, TrDate, Time
SELECT TransactionID, TrDate, Time1, Tr_Serial, Port, UnitNo, UserPIN,Finger,
IP, UnitName, Tr_Description,
CASE WHEN ROW_NUMBER() OVER (PARTITION BY userpin, TrDate
ORDER BY trdate, time1) % 2 = 0
THEN '2'
ELSE '1'
END Tr_Type
FROM (
SELECT row_number() OVER (
ORDER BY datetime) TransactionID, cast([datetime] AS date) TrDate, cast(
[datetime] AS time) Time1, [eventserial] Tr_Serial, '1' Port, [READERID]
UnitNo, [EVENTID] Tr_Type, [USERID] UserPIN, '1' Finger, 'NA' IP, [
READERNAME] UnitName, [EVENTNAME] Tr_Description
FROM [BBC].[dbo].[BBC_LOG]) A
WHERE Tr_Type = 47 OR Tr_Type = 55
谢谢
SELECT TransactionID, TrDate, MIN(Time1), Tr_Serial, Port, UnitNo, UserPIN,Finger,
IP, UnitName, Tr_Description,
CASE WHEN Min(ROW_NUMBER()) OVER (PARTITION BY userpin, TrDate
ORDER BY trdate, time1) % 2 = 0
THEN '2'
ELSE '1'
END Tr_Type
FROM (
SELECT row_number() OVER (
ORDER BY datetime) TransactionID, cast([datetime] AS date) TrDate, cast(
[datetime] AS time) Time1, [eventserial] Tr_Serial, '1' Port, [READERID]
UnitNo, [EVENTID] Tr_Type, [USERID] UserPIN, '1' Finger, 'NA' IP, [
READERNAME] UnitName, [EVENTNAME] Tr_Description
FROM [BBC].[dbo].[BBC_LOG]) A
WHERE Tr_Type = 47 OR Tr_Type = 55
试试这个
不确定您的输出是什么,但我知道您需要datetime上的Min,以获取第一个日期/时间,即用户第一次打卡的日期/时间