【发布时间】:2017-05-29 04:16:31
【问题描述】:
我刚开始学习 SQL,并且正在阅读 Ken Henderson 的一本书,名为“The Guru's Guide To Transact SQL”。在书中它给了我这张桌子:
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')
然后它给出了一段代码,用于查询员工离开办公室的时间:
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 行(嵌套部分真的让我很反感)。似乎它正在迭代表?谁能给初学者详细解释一下。
提前谢谢你。
【问题讨论】:
-
它似乎正在过滤掉当前在办公室的记录。
-
我不会推荐一本 2000 年的书来开始学习 SQL。我建议从khanacademy.org/computing/computer-programming/sql 或w3schools.com/sql 开始,然后是Louis Davidson 的关于设计和实现的书drsql.org/Pages/ProSQLServerDatabaseDesign.aspx 开始。
标签: sql-server time nested timestamp