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 Server 2014如何存储插入之间的时间间隔_Sql_Sql Server_Sql Server 2014 - Fatal编程技术网

SQL Server 2014如何存储插入之间的时间间隔

SQL Server 2014如何存储插入之间的时间间隔,sql,sql-server,sql-server-2014,Sql,Sql Server,Sql Server 2014,我在SQL Server 2014中工作,试图创建一个列来存储SQL插入之间的间隔。我该怎么做?我用一个insert语句插入来自多个传感器的电流值。我希望这张桌子看起来像附件中的图片 需要时,只需使用lag()计算: select t.*, datediff(second, lag(timestamp) over (order by timestamp), timestamp ) as diff_in_seconds from t; 创建表时不需要执

我在SQL Server 2014中工作,试图创建一个列来存储SQL插入之间的间隔。我该怎么做?我用一个insert语句插入来自多个传感器的电流值。我希望这张桌子看起来像附件中的图片

需要时,只需使用
lag()
计算:

select t.*,
       datediff(second, lag(timestamp) over (order by timestamp), timestamp
               ) as diff_in_seconds
from t;

创建表时不需要执行此操作。

您可以使用以下命令

  • 将名为internal的新字段添加到表中,并进行更新查询以更新此字段“Interval”
  • 对于新记录,请执行以下操作
    • top(1)查找最后插入的记录,并按时间戳desc排序
    • 插入新记录,并将值设置为
      Iterval=now-lastinserted.TimeStamp
  • 此解决方案在更新现有记录时会花费时间,但在插入时,您会查询数据库以获取最后一次插入的记录,然后将更新的数据发送给数据库,但此解决方案在超过100000条记录的数据上会更好


    希望这对您有所帮助

    您的示例数据毫无意义。14来自哪里?只使用
    时间戳
    列有什么问题?对不起。14是每次插入之间的秒数。这是一个任意数字。我用正确的秒间隔重新加载了一个更好的图像。由于间隔列可以在以后基于时间戳列生成,为什么在插入期间计算它。也许您可以在插入之前通过
    -MAX(TimeStamp)
    来实现这一点,但事情会变得复杂。我使用了lag,但有数千条记录和多个传感器,查询需要很长时间。@JaySettle您有时间戳索引吗?我没有。我会试试看。通过时间戳索引,我有以下内容:700行需要1秒。2000行需要11秒。6000行需要19秒。@JaySettle。这个问题没有具体说明有关传感器的任何内容。你应该问另一个问题,包括你想做什么,你正在使用的查询,以及你拥有的索引的全部信息。谢谢,我喜欢这个。您是否建议在每次插入时运行存储过程?这可能行得通,但我担心缩放。。。存储过程必须找到该传感器的“最大”时间戳,该时间戳实际上是另一个传感器表的联接。如果我有数千个微控制器,带有数千条记录的多个传感器,它需要搜索的记录越多,需要的时间会越长吗?你不需要找到最大值,你会得到最后插入的记录,因为它会保留最大时间戳