解决方案 »

  1.   

    如果你真是SQL2005,可以这样查;WITH CTE AS(
    SELECT logid,logtime
    ,COUNT(1)OVER(PARTITION BY logid)C
    ,MIN(logtime)OVER(PARTITION BY logid)Minlogtime
    ,MAX(logtime)OVER(PARTITION BY logid)Maxlogtime
    FROM logtable
    WHERE logtime BETWEEN '2015-3-1 11:00:00' AND '2015-3-1 13:00:00'
    )
    SELECT logid,logtime
    FROM CTE
    WHERE C=4 AND DATEDIFF(MINUTE,Minlogtime,Maxlogtime)>=40
      

  2.   

    Select * from (SELECT * FROM  logtablE WHERE logid in
     (SELECT logid FROM logtable WHERE logtime BETWEEN '2015-3-1 11:00:00' AND '2015-3-1 13:00:00' GROUP BY Logid HAVING COUNT(*)=4)
       AND logtime BETWEEN '2015-3-1 11:00:00' AND '2015-3-1 13:00:00' ) A  
      WHERE logid in(select logid FROM A GROUP BY logid HAVING DATEDIFF(MINUTE,MIN(logtime),MAX(logtime))>40) 
    ORDER by logname,logtime
      

  3.   


    SELECT * 
    FROM logtablE a
    INNER JOIN (
    SELECT logid,MAX(logtime) AS MaxLogTime,MIN(logtime) AS MinLogTime
    FROM logtable 
    WHERE logtime BETWEEN '2015-3-1 11:00:00' AND '2015-3-1 13:00:00' 
    GROUP BY Logid HAVING COUNT(*)=4) b ON a.logid=b.logid AND DATEDIFF(MINUTE,b.MinLogTime,b.MaxLogTime)>40
      

  4.   

    考勤是个设计问题,而不是单个SQL技巧问题