gpt4 book ai didi

sql-server - 从 1 列计算时间

转载 作者:行者123 更新时间:2023-12-01 06:17:46 25 4
gpt4 key购买 nike

好的,这是我的情况。我们以前的数据库专家 (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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com