用于在办公室中查找输入/输出时间的SQL查询
这对数据库的人来说可能是个愚蠢的问题,但对我来说很难,因为这是我第一次看到数据库。我不是数据库的人,但我必须这样做 我在SQLServer2005中有一个数据库,其中有一个视图,其中包含与办公室员工入/出相关的数据 对于某一特定日期,一天可能有多于2个条目,但我们认为一天中的第一个条目是在办公室中的时间,最后一个条目是从办公室出来的时间,在这些员工之间可以外出的任何时间,但是我们只考虑一天中的第一次和最后一次进入。 所以我必须为这个写查询 编辑: 视图中的冒号列表其他一些冒号也存在,但我认为没有必要在这里描述用于在办公室中查找输入/输出时间的SQL查询,sql,sql-server,Sql,Sql Server,这对数据库的人来说可能是个愚蠢的问题,但对我来说很难,因为这是我第一次看到数据库。我不是数据库的人,但我必须这样做 我在SQLServer2005中有一个数据库,其中有一个视图,其中包含与办公室员工入/出相关的数据 对于某一特定日期,一天可能有多于2个条目,但我们认为一天中的第一个条目是在办公室中的时间,最后一个条目是从办公室出来的时间,在这些员工之间可以外出的任何时间,但是我们只考虑一天中的第一次和最后一次进入。 所以我必须为这个写查询 编辑: 视图中的冒号列表其他一些冒号也存在,但我认为没
- 卡德斯诺
- 姓氏
- 名字
- 中脉
- 个人身份
- 日期
- 时间
- YMD
- HMS
- 卡号
- 系
;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估计我的新飞机请求)