sql-server - 从 1 列计算时间

标签 sql-server

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

相关文章:

sql - "String data, right truncation"通过 ODBC 但不是通过具有相同查询的 SQL Server 管理器

c# - 在 SQL Server 中将 varchar 和 char 转换为 nvarchar 和 nchar 是否安全?

sql-server - SQL 服务器 : Insert Multiple Duplicate Records into Child table from Parent table

sql-server - 使用 SQL Server 存储数据

sql - SQL中的格式化

SQL 将列转换为逗号分隔的行

sql - 在 SQL 中如何不选择列值与其上一行中的列值相同的行

sql-server - ONLY 关键字 - 含义

SQL查询从表中获取不存在的记录

SQL - 使用 IN (@Variable_CommaDelimitedListOfIDS) 的带有 Select 语句的存储过程