如何获得适当的时间

时间:2011-01-31 10:12:48

标签: sql sql-server sql-server-2005

使用SQL Server

表1

ID Actual_Intime Actual_Outtime

001 08:00:00 18:00:00 (HHMMSS)
002 20:00:00 06:00:00
003 05:00:00 14:00:00
004 19:30:00 03:30:00
...

...

Actual_Intime Datatype is nvarchar
Actual_Outtime Datatype is nvarchar

我需要像

那样验证员工时间

“如果停机时间小于银泰时间,那么应该在同一天使用时间和停机时间”

“如果停播时间大于时间,那么应该在同一天使用intime,并且应该在第二天停止。

表2

ID Date Time

001 20100102 06:00:00
001 20100102 08:00:00
001 20100102 14:00:00
001 20100102 19:00:00
002 20100102 19:00:00
002 20100102 21:00:00
002 20100103 03:00:00
002 20100103 07:00:00
...,

...

Date Datatype is nvarchar
Time Datetype is nvarchar

Date Format: yyyymmdd
Time Format: HHMMSS

我需要从table2获取Min(时间)和Max(时间),但table2比较table1的实际intime和实际outtime

预期产出

ID Date Intime Outtime

001 20100102 06:00:00 19:00:00 

(这里Actual_Outtime小于table1中的Actual_Intime,因此在table2中它应该占用同一天的intime和outtime)

002 20100102 19:00:00 07:00:00 

(此处Actual_Outtime大于table1中的Actual_Intime,因此在table2中,它应该将第二天的时间作为停机时间)

如何将Intime和Outtime与实际的Intime和实际的Outtime进行比较。

需要查询帮助

1 个答案:

答案 0 :(得分:2)

不确定此处是否确实需要Table1。据我所知,Table2包含生成结果表的所有必要信息。

SELECT
  ID,
  date =    CONVERT(char(8), intime,  112),
  intime =  CONVERT(char(8), intime,  108),
  outtime = CONVERT(char(8), outtime, 108)
FROM (
  SELECT
    ID,
    intime =  MIN(dt),
    outtime = MAX(dt)
  FROM (
    SELECT
      ID,
      dt = CAST(Actual_Intime + ' ' + Actual_Outtime AS datetime)
    FROM Table2
  ) s
) m

我在此假设Table1.Actual_Intime对应MIN(CAST(Table2.Date + ' ' + Table2.Time AS datetime))Table1.Actual_Outtime对应MAX(...),这似乎与给出的描述一致。