Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 求和并更新临时跳过记录_Sql_Sql Server 2012 - Fatal编程技术网

Sql 求和并更新临时跳过记录

Sql 求和并更新临时跳过记录,sql,sql-server-2012,Sql,Sql Server 2012,我有一个临时表tbl,它的顺序是这样的,我试图计算第一条记录和第二条记录、第二条记录和第三条记录之间的差异,以此类推,更新名为Diff的字段中的结果 要解决的第二个问题是,我必须只取codeid22到23之间的差异,我必须丢弃codeid23到下一个22之间的差异。I CodeId=22表示开始,23表示停止,我必须计算驾驶时间 Fecha Driver CodeId Diff 2014/03/01 14:00:00, 7168, 22 ,

我有一个临时表tbl,它的顺序是这样的,我试图计算第一条记录和第二条记录、第二条记录和第三条记录之间的差异,以此类推,更新名为Diff的字段中的结果

要解决的第二个问题是,我必须只取codeid22到23之间的差异,我必须丢弃codeid23到下一个22之间的差异。I CodeId=22表示开始,23表示停止,我必须计算驾驶时间

  Fecha               Driver   CodeId  Diff
  2014/03/01 14:00:00, 7168,     22  ,  0
  2014/03/01 14:30:00, 7168,     23  ,  0
  2014/03/01 14:40:00, 7168,     22  ,  0
  2014/03/01 16:10:00, 7168,     23  ,  0
  2014/03/01 16:50:00, 7168,     22  ,  0
  2014/03/01 17:20:00, 7168,     23  ,  0
  2014/03/01 18:30:00, 7168,     22  ,  0
  2014/03/01 19:10:00, 7168,     23  ,  0
我写了这段代码,但我发现了一个错误:

    UPDATE #tbl
    SET Difer = DATEDIFF(second, Fecha, LEAD(Fecha,1, Fecha) OVER (ORDER BY Fecha))
    FROM #tbl

    Msg 4108, Level 15, State 1, Line 2
    Windowed functions can only appear in the SELECT or ORDER BY clauses.
Im使用MS SQL server 2012

不知道怎么解决,你能帮我吗。多谢各位

我在等待帮助的时候写了这段代码

    ; WITH Sumar AS (
     Select Fecha as Fecha1, 
         DATEDIFF(second, Fecha, LEAD(Fecha,1, Fecha) OVER (ORDER BY Fecha)) as Total
     FROM #tbl)
    UPDATE #tbl
    SET Difer = Total
    FROM Sumar
    WHERE Fecha = Fecha1 AND EvenTypeId <> 23
对我来说工作很好。谢谢大家。

试试这个

;WITH CTE_GO
AS(  
 SELECT Fecha , Driver, CodeId,Diff,
        ROW_NUMBER() OVER (ORDER BY Fecha ASC) RN_Go
 FROM  #tbl
 WHERE CodeId = 22
 ),
 CTE_Stop
 AS
 (
 SELECT Fecha , Driver, CodeId,Diff,
        ROW_NUMBER() OVER (ORDER BY Fecha ASC) RN_Go
 FROM  #tbl
 WHERE CodeId = 23
 )
UPDATE  S
SET S.Diff = DATEDIFF(MINUTE, G.Fecha, S.Fecha) 
FROM CTE_GO G INNER JOIN CTE_Stop S
ON G.RN_Go = S.RN_Go
结果集


谢谢你的回答M.阿里,我在等待帮助的时候试着写了下面的代码和作品。再次感谢你
╔═════════════════════════╦════════╦════════╦══════╗
║          Fecha          ║ Driver ║ CodeId ║ Diff ║
╠═════════════════════════╬════════╬════════╬══════╣
║ 2014-03-01 14:00:00.000 ║   7168 ║     22 ║    0 ║
║ 2014-03-01 14:30:00.000 ║   7168 ║     23 ║   30 ║
║ 2014-03-01 14:40:00.000 ║   7168 ║     22 ║    0 ║
║ 2014-03-01 16:10:00.000 ║   7168 ║     23 ║   90 ║
║ 2014-03-01 16:50:00.000 ║   7168 ║     22 ║    0 ║
║ 2014-03-01 17:20:00.000 ║   7168 ║     23 ║   30 ║
║ 2014-03-01 18:30:00.000 ║   7168 ║     22 ║    0 ║
║ 2014-03-01 19:10:00.000 ║   7168 ║     23 ║   40 ║
╚═════════════════════════╩════════╩════════╩══════╝