首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL Server - TimeStamp差距

SQL Server - TimeStamp差距
EN

Stack Overflow用户
提问于 2017-01-14 01:50:23
回答 1查看 42关注 0票数 0

我刚刚开始学习SQL,并且正在阅读Ken Henderson的一本名为“Transact SQL的大师指南”的书。在书中,它给了我这个表:

代码语言:javascript
运行
复制
CREATE TABLE timeclock
(
     Employee varchar(30),
     TimeIn smalldatetime,
     TimeOut smalldatetime
)

INSERT timeclock VALUES('Pythia','07:31:34','12:04:01')
INSERT timeclock VALUES('Pythia','12:45:10','17:32:49')
INSERT timeclock VALUES('Dionysus','9:31:29','10:46:55')
INSERT timeclock VALUES('Dionysus','10:59:32','11:39:12')
INSERT timeclock VALUES('Dionysus','13:05:16','14:07:41')
INSERT timeclock VALUES('Dionysus','14:11:49','14:57:02')
INSERT timeclock VALUES('Dionysus','15:04:12','15:08:38')
INSERT timeclock VALUES('Dionysus','15:10:31','16:13:58')
INSERT timeclock VALUES('Dionysus','16:18:24','16:58:01') 

然后它给出一段代码,用来查询员工离开办公室的时间:

代码语言:javascript
运行
复制
SELECT 
    t1.Employee, t1.TimeOut AS StartOfLoafing,
    t2.TimeIn AS EndOfLoafing,
    DATEDIFF(mi,t1.TimeOut,t2.TimeIn) AS LengthOfLoafing
FROM 
    timeclock t1 
JOIN 
    timeclock t2 ON (t1.Employee = t2.Employee)
WHERE 
    (t1.TimeOut = (SELECT MAX(t3.TimeOut)
                   FROM timeclock t3
                   WHERE (t3.Employee=t1.Employee) AND (t3.TimeOut <= t2.TimeIn)))

我试着阅读了这个查询的解释,但是我仍然不理解第5-7行(嵌套部分真的让我抓狂)。看起来像是在迭代表?有人能给初学者详细解释一下吗?

提前谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2017-01-14 02:50:17

上面的查询使用连接生成员工及其timein/timeout的笛卡尔乘积。它使用where t1.timeout=子查询来获取小于t2.TimeIn的最新timeout (在本例中使用max )。

该查询也可以这样编写:

代码语言:javascript
运行
复制
select
      t1.Employee
    , StartOfLoafing  = t1.TimeOut
    , EndOfLoafing    = t2.TimeIn 
    , LengthOfLoafing = datediff(mi,t1.TimeOut,t2.TimeIn)
  from timeclock as t1
    cross apply (
      select top 1 i.timein
        from timeclock i
        where i.employee=t1.employee
          and i.timein >=t1.timeout
        order by i.timein asc) as t2

rextester:http://rextester.com/SES2195

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41640585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档