在5分钟内仅显示多个条目的第一条记录

时间:2015-09-01 10:13:57

标签: sql sql-server

我有一个查询显示集合中的行,每个行集将有两个由1和2标识的记录。它基本上是进出时间。有时用户会多次打数据。例如,当他正在打击时,他可能会多次打拳以确保,但实际上他应该只打一次。虽然打出了“冲出去”,他可能会多次再打一次以确保,但实际上他应该只打一次。每个条目都会捕获时间。我需要配置以下查询以仅获取多个条目的第一次条目或记录。更确切地说,如果在5分钟内有多个条目,那么在特定的5分钟时间内只显示第一条记录而忽略其余条目。

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

感谢。

1 个答案:

答案 0 :(得分:0)

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

试试这个 不知道你的输出是什么,但我知道你的日期时间需要Min(),以获得第一个日期/时间,即用户输入的第一个日期/时间