好的,这是我的情况。我们以前的数据库专家 (SQL Server 2008) 建立了一个表来存储时间以提高性能。时间由 VB 脚本生成并输入到表中。
表现过程(表中:从下到上):
- (打开 1) 从菜单中选择 (1) -> 记录时间
- (open 2) 出现窗口 (2) -> 记录时间
- (选择 1)输入帐号并按“搜索”(3) -> 记录时间
- (选择 2)当数据出现时 -> 记录时间(4)
例如
Msrmnt | Time | Window | Function | Position
--------+-------------------------+------------+----------+-----------
109 | 2016-05-10 20:35:32.243 | WindowName | Select | 2
109 | 2016-05-10 20:35:29.230 | WindowName | Select | 1
109 | 2016-05-10 20:35:26.697 | WindowName | Open | 2
109 | 2016-05-10 20:35:23.297 | WindowName | Open | 1
现在,我需要计算 2 个开放值(1 和 2)之间的时间(例如)。我在数据库方面确实有很多经验,但我仍然坚持我应该如何最好地解决这个问题以确保我是 1.) 获得准确的结果,2.) 计算在时间方面是有效的(因为其中有很多条目一个星期的时间)
谢谢你的建议
凯伦
最佳答案
基本示例如何计算两个时间值之间的时间:
;WITH cte AS (
SELECT *
FROM (VALUES
(109, '2016-05-10 20:35:32.243', 'WindowName', 'Select', 2),
(109, '2016-05-10 20:35:29.230', 'WindowName', 'Select', 1),
(109, '2016-05-10 20:35:26.697', 'WindowName', 'Open', 2),
(109, '2016-05-10 20:35:23.297', 'WindowName', 'Open', 1)
) as t (Msrmnt, [Time], Window, [Function], Position)
)
SELECT c.Msrmnt,
c.Window,
DATEDIFF(MILLISECOND,c.[Time],c1.[Time]) as ms
FROM cte c
INNER JOIN cte c1
ON c.Msrmnt = c1.Msrmnt
AND c.Window = c1.Window
AND c.[Function] = c1.[Function]
AND c.Position + 1= c1.Position
WHERE c.[Function] = 'Open'
输出:
Msrmnt Window ms
----------- ---------- -----------
109 WindowName 3400
关于sql-server - 从 1 列计算时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37162522/