Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于在办公室中查找输入/输出时间的SQL查询_Sql_Sql Server - Fatal编程技术网

用于在办公室中查找输入/输出时间的SQL查询

用于在办公室中查找输入/输出时间的SQL查询,sql,sql-server,Sql,Sql Server,这对数据库的人来说可能是个愚蠢的问题,但对我来说很难,因为这是我第一次看到数据库。我不是数据库的人,但我必须这样做 我在SQLServer2005中有一个数据库,其中有一个视图,其中包含与办公室员工入/出相关的数据 对于某一特定日期,一天可能有多于2个条目,但我们认为一天中的第一个条目是在办公室中的时间,最后一个条目是从办公室出来的时间,在这些员工之间可以外出的任何时间,但是我们只考虑一天中的第一次和最后一次进入。 所以我必须为这个写查询 编辑: 视图中的冒号列表其他一些冒号也存在,但我认为没

这对数据库的人来说可能是个愚蠢的问题,但对我来说很难,因为这是我第一次看到数据库。我不是数据库的人,但我必须这样做

我在SQLServer2005中有一个数据库,其中有一个视图,其中包含与办公室员工入/出相关的数据

对于某一特定日期,一天可能有多于2个条目,但我们认为一天中的第一个条目是在办公室中的时间,最后一个条目是从办公室出来的时间,在这些员工之间可以外出的任何时间,但是我们只考虑一天中的第一次和最后一次进入。 所以我必须为这个写查询

编辑:

视图中的冒号列表其他一些冒号也存在,但我认为没有必要在这里描述

  • 卡德斯诺
  • 姓氏
  • 名字
  • 中脉
  • 个人身份
  • 日期
  • 时间
  • YMD
  • HMS
  • 卡号
试试好的ol'

试试好的ol'

您可以使用排名函数来确定第一次和最后一次输入

  ;WITH cte AS
 (                             
  SELECT *, ROW_NUMBER() OVER(PARTITION BY PersonalID ORDER BY [Date] ASC, [Time] ASC) AS rnASC,
            ROW_NUMBER() OVER(PARTITION BY PersonalID ORDER BY [Date] DESC, [Time] DESC) AS rnDESC
  FROM dbo.your_tableName
  )
  SELECT *
  FROM cte
  WHERE rnASC = 1 OR rnDESC = 1
简单的例子

或与运算符一起使用选项

您可以使用排名函数来确定第一次和最后一次输入

  ;WITH cte AS
 (                             
  SELECT *, ROW_NUMBER() OVER(PARTITION BY PersonalID ORDER BY [Date] ASC, [Time] ASC) AS rnASC,
            ROW_NUMBER() OVER(PARTITION BY PersonalID ORDER BY [Date] DESC, [Time] DESC) AS rnDESC
  FROM dbo.your_tableName
  )
  SELECT *
  FROM cte
  WHERE rnASC = 1 OR rnDESC = 1
简单的例子

或与运算符一起使用选项


下面是一个简单的例子,我现在使用这个查询:

SELECT FirstName,LastName,CardNumber,Department, Date , MIN(Time) AS intime , MAX(Time) AS outtime ,
convert(varchar(8),(convert(datetime,MAX(Time),110) - convert(datetime,MIN(Time),110)),108) AS Duration
FROM CARDENTRYEXITTRANSACTIONVIEW
GROUP BY FirstName, Date,LastName,CardNumber,Department

它给出了完美的结果………

现在我使用这个查询:

SELECT FirstName,LastName,CardNumber,Department, Date , MIN(Time) AS intime , MAX(Time) AS outtime ,
convert(varchar(8),(convert(datetime,MAX(Time),110) - convert(datetime,MIN(Time),110)),108) AS Duration
FROM CARDENTRYEXITTRANSACTIONVIEW
GROUP BY FirstName, Date,LastName,CardNumber,Department


它会给出完美的结果………

你如何区分进入和退出。屏幕截图没有传达这些信息。请查看a以了解SQL基础知识,并注意MIN和MAX语句。根据卡号和日期,我们可以获取相应的条目,然后我们可以获取第一次和最后一次的输入和输出……。我说得对吗……。@vikky您能提供其中的列列表吗表/视图?@peterm查看编辑部分…….如何区分输入项和输出项。屏幕截图没有传达这些信息。请查看a以了解SQL基础知识,并注意MIN和MAX语句。根据卡号和日期,我们可以获取相应的条目,然后我们可以获取第一次和最后一次的输入和输出……。我说得对吗……。@vikky您能提供其中的列列表吗表/视图?@peterm查看编辑部分…….米奇,我认为这需要按日期分组为well@MarkOrmston,这只是一个例子。屏幕截图没有提供列列表,我希望有一个合并的日期/时间列,但是是的,如果它们是单独的,则需要额外的工作。明白了。你回答的时候我正要回答,但屏幕截图上的日期和时间看起来是分开的,可能这样做是为了让他问的更容易,我不想干扰你的回答,所以我想我会告诉你并让你得到答案。@Mitch你能告诉我这里的交易日期吗?我想我们需要按日期分组alsoMitch,我想这需要按日期分组为well@MarkOrmston,这只是一个例子。屏幕截图没有提供列列表,我希望有一个合并的日期/时间列,但是是的,如果它们是单独的,则需要额外的工作。明白了。你回答的时候我正要回答,但屏幕截图上的日期和时间看起来是分开的,可能这样做是为了让他问的更容易,我不想干扰你的回答,所以我想我会告诉你并让你得到答案。@Mitch你能告诉我这里的交易日期吗?我想我们需要按日期分组。对我来说,alsoMin、Max或TOP比双排数字更自然。@ErikE请给我演示;)非常interestingly@ErikE估计我的新喷气机请求)对我来说,最小值、最大值或最大值比双排数字要自然得多。@ErikE请给我演示;)非常interestingly@ErikE估计我的新飞机请求)