Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.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_Tsql - Fatal编程技术网

Sql 获取最小和最大日期

Sql 获取最小和最大日期,sql,sql-server,tsql,Sql,Sql Server,Tsql,我的问题是: with CTE (CardID,Name,Surname,Department,CurrentDate,Time_In,Time_Out) as ( select CardID, Name, Surname, Department, convert(char, pocdate, 106) as CurrentDate, case when GateID in (1,6) then min(convert(char,pocdate,108)) e

我的问题是:

with 
  CTE (CardID,Name,Surname,Department,CurrentDate,Time_In,Time_Out) as (
    select CardID, Name, Surname, Department, convert(char, pocdate, 106) as CurrentDate,
           case when GateID in (1,6) then min(convert(char,pocdate,108)) else '' end as Time_In,
           case when GateID in (2,5) then max(convert(char,pocdate,108)) else '' end as Time_Out     
      from tblEmployee
     where Name = 'erdal'
     group by CardID,Name,Surname,Department,GateID,pocdate
)
select CardID,Name,Surname,Department,CurrentDate,Time_In,Time_Out
from CTE
group by CardID,Name,Surname,Department,CurrentDate,Time_In,Time_Out     
order by CardID asc;
结果:

 CardID    Name    Surname   Department   CurrentDate    Time_In    Time_Out
--------- ------- --------- ------------ ------------- ----------- ----------
 6672983   ERDAL   HUZMELI   IT            11-Jan-16     12:41:32
 6672983   ERDAL   HUZMELI   IT            11-Jan-16     17:38:21
 6672983   ERDAL   HUZMELI   IT            11-Jan-16     08:01:53
 6672983   ERDAL   HUZMELI   IT            11-Jan-16     08:03:24
 6672983   ERDAL   HUZMELI   IT            11-Jan-16     13:22:22
 6672983   ERDAL   HUZMELI   IT            11-Jan-16     13:26:47
 6672983   ERDAL   HUZMELI   IT            11-Jan-16     17:36:46
是否有一种方法可以只找到最短的
输入时间
和最长的
输出时间

 CardID    Name    Surname   Department   CurrentDate    Time_In    Time_Out
--------- ------- --------- ------------ ------------- ----------- ----------
 6672983   ERDAL   HUZMELI   IT            11-Jan-16     08:01:53   17:38:21

您的查询似乎不需要CTE。您只需在一个步骤中完成聚合。您需要的是条件聚合:

Select CardID, Name, Surname, Department,
       convert(varchar(32), pocdate, 106) as CurrentDate,
       min(case when GateID in (1, 6) then convert(varchar(32), pocdate, 108))     
           end) as Time_In,
       max(case when GateID in (2, 5) then convert(varchar(32), pocdate, 108))     
           end) as Time_Out
from tblEmployee
where Name = 'erdal'
group by CardID, Name, Surname ,Department, kGateID,
         convert(varchar(32), pocdate, 106);

注意:在SQL Server中,使用
varchar()
char()
时,应始终包含长度。默认值因上下文而异,并且取决于默认值,可能会引入难以调试的错误。

只是不要在最后按时间输入和时间输出分组。