【发布时间】:2019-06-14 22:56:45
【问题描述】:
我需要计算两个日期之间的时间;问题是我有两行 x 人的数据,从 x 时间的第 1 天开始,在 x 时间完成第 2 天,然后在 x 时间的第 2 天重新开始,直到 x 时间的第 3 天......
所以我需要确定每个人每天的持续时间。
希望大家能帮帮我!!!
提前谢谢你。
我已经尝试了一些选项,但无法获得我想要的结果。
-- Table example
DECLARE @tbl TABLE(person varchar(10), startDate DATE, startTime TIME(0), endDate DATE, endTime TIME(0))
INSERT INTO @tbl
SELECT 'PERSON A' person, '2019-06-06' startDate, '02:14:00' startTime, '2019-06-06' endDate, '06:00:00' endTime
INSERT INTO @tbl
SELECT 'PERSON A' person, '2019-06-06' startDate, '22:00:00' startTime, '2019-06-07' endDate, '06:00:00' endTime
SELECT * FROM @tbl -- > This would be the table example
预期的结果是
First_Row = (2019-06-06 06:00:00 - 2019-06-06 02:14:00) => 03:46:00
Second_RowA = (2019-06-06 22:00:00 - 2019-06-06 24:00:00) => 02:00:00
Second_RowB = (2019-06-07 02:14:00 - 2019-06-07 00:00:00) => 02:14:00 因为剩余时间是由第一行计算的
所以最后的结果是:
First_Row + Second_RowA + SecondRowB = 08:00:00
更新:
答案对我需要做的事情不起作用,但我知道这个问题有点棘手(抱歉我的英语不好),我会尽力解释得更好,所以我开始了:
我有呼叫中心代理的登录和注销数据,这些代理的工作班次从 22 到 06,所以我需要计算的是 loginTime 的最小值和 logOutTime 的最大值,但这就是它变得复杂的地方,因为在某些情况下,代理在该时间范围内断开连接,然后在另一个班次开始的同一天在数据库中创建另一个登录事件,依此类推。
所以我的问题是:如何确定我需要的最小值和最大值,每个代理和每个日期只显示一次?
这是数据:
DECLARE @tbl TABLE(agentId VARCHAR(10), position VARCHAR(10), loginDate DATE, loginTime TIME(0), logoutDate DATE, logoutTime TIME(0))
INSERT INTO @tbl SELECT '311338', '230025', '2019-06-03', '21:59:00', '2019-06-04', '06:00:00'
INSERT INTO @tbl SELECT '311338', '230025', '2019-06-04', '21:59:00', '2019-06-04', '23:30:00'
INSERT INTO @tbl SELECT '311338', '230025', '2019-06-04', '23:31:00', '2019-06-05', '06:01:00'
INSERT INTO @tbl SELECT '311338', '230038', '2019-06-05', '21:59:00', '2019-06-06', '02:13:00'
INSERT INTO @tbl SELECT '311338', '230038', '2019-06-06', '02:14:00', '2019-06-06', '06:00:00'
INSERT INTO @tbl SELECT '311338', '230037', '2019-06-06', '22:00:00', '2019-06-07', '06:00:00'
INSERT INTO @tbl SELECT '311338', '230038', '2019-06-07', '21:59:00', '2019-06-08', '00:53:00'
INSERT INTO @tbl SELECT '311338', '230038', '2019-06-08', '00:53:00', '2019-06-08', '06:00:00'
INSERT INTO @tbl SELECT '311338', '230038', '2019-06-09', '22:00:00', '2019-06-10', '06:09:00'
SELECT agentId
,position
,(CAST(loginDate AS DATETIME) + CAST(loginTime AS DATETIME)) loginTime
,(CAST(logoutDate AS DATETIME) + CAST(logoutTime AS DATETIME)) logoutTime
FROM @tbl
agentId 311338 的结果是:
2019-05-06 日: minLogin = 2019-06-05 21:59:00.000 maxLogout = 2019-06-06 06:00:00.000
2019-06-06 日: minLogin = 2019-06-06 22:00:00.000 maxLogout = 2019-06-07 06:00:00.000
2019-06-07 日: minLogin = 2019-06-07 21:59:00.000 maxLogout = 2019-06-08 06:00:00.000
【问题讨论】:
标签: sql-server tsql date datetime