SQL Server 计算切换间隔秒数

2023-12-01

我有一个这样的表:

Value TimeStamp
1   2016-04-01 00:01:09.000
0   2016-04-01 00:01:09.000
0   2016-04-01 00:01:37.000
1   2016-04-01 00:01:37.000
1   2016-04-01 00:04:52.000
1   2016-04-01 00:09:58.000
1   2016-04-01 00:15:05.000
1   2016-04-01 00:20:11.000
1   2016-04-01 00:24:49.000
1   2016-04-01 00:29:55.000
1   2016-04-01 00:31:19.000
0   2016-04-01 00:31:19.000
0   2016-04-01 00:31:46.000
1   2016-04-01 00:31:46.000
1   2016-04-01 00:35:01.000
1   2016-04-01 00:40:07.000
1   2016-04-01 00:44:46.000
1   2016-04-01 00:49:52.000
1   2016-04-01 00:54:58.000
1   2016-04-01 01:00:04.000
1   2016-04-01 01:01:28.000
0   2016-04-01 01:01:28.000
0   2016-04-01 01:05:10.000
0   2016-04-01 01:09:49.000

我想计算每天值为 1(打开)的秒数,这是交易;当时间戳重复时,意味着开关值从 0 变为 1,反之亦然,我已经有了很多类似的方法:

Q1 AS (SELECT ROW_NUMBER() OVER (ORDER BY TimeStamp) AS id,
Value, Timestamp
FROM Q2
GROUP BY idVBox, sensorType, sensorSubtype, timeStamp
HAVING COUNT(TimeStamp) > 1)

Then:

SELECT A.Value, DATEDIFF(SECOND,A.TimeStamp,B.TimeStamp)
FROM Q1 AS A
INNER JOIN Q1 AS B
ON B.ID = A.ID + 1
AND B.ID%2 = 0

然后进行分组和求和,但这里的问题是我不知道过去一天的值是 1 还是 0,并且开关可以快速更改其状态,但永远不会获得其实际状态的实际值。还有其他想法吗?


您想要做的是在开始计算之前的一天开始时将虚拟传感器状态开关添加到您的设置中。

添加的额外记录是:

0, '2016-04-01 00:00:00'
1, '2016-04-01 00:00:00' -- This is conditional on the first record in your set having a value of 1

整体查询如下
注意:为了确定哪个记录实际上是序列中的第一个记录,我使用了“ID”列。

;WITH Q0 AS(
    -- Inserts a new record ( 0, '2016-04-01 00:00:00' ) to the beginning of the day
    SELECT TOP 1 0 AS Value, CONVERT( DATETIME, CONVERT( DATE, LogDate )) AS LogDate
    FROM #SwitchLog
    UNION ALL
    -- Inserts a new record ( 1, '2016-04-01 00:00:00' ) to the beginning of the day when the first record has Value = 1
    SELECT Value, CONVERT( DATETIME, CONVERT( DATE, LogDate )) AS LogDate
    FROM
        ( SELECT TOP 1 ID, Value, LogDate
        FROM #SwitchLog
        ORDER BY LogDate ASC, ID ASC ) AS DummyRecord --<-- NOTE: the use of a table ID column
    WHERE Value = 1
    UNION ALL
    SELECT Value, LogDate
    FROM #SwitchLog
)
,
Q1 AS (SELECT ROW_NUMBER() OVER (ORDER BY LogDate) AS id,
SUM( Value ) AS Value, LogDate
FROM Q0
GROUP BY LogDate
HAVING COUNT(LogDate) > 1)

SELECT A.Value, DATEDIFF(SECOND,A.LogDate,B.LogDate) AS Total
FROM Q1 AS A
INNER JOIN Q1 AS B
ON B.ID = A.ID + 1 AND B.ID%2 = 0

Output:

Value       Total
----------- -----------
1           69
1           1782
1           1782

应使用相同的方法在时间段/天 ((day + 1) 00:00:00) 结束时插入虚拟记录,以满足传感器值在一天结束时为 1 的情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server 计算切换间隔秒数 的相关文章

  • 通过网络恢复数据库备份

    如何通过网络使用 SQL Server 2005 恢复数据库备份 我记得以前这样做过 但这样做的方式有些奇怪 您几乎没有选择使用网络文件作为备份源 在与 MS SQL Server 相同的用户下映射网络驱动器 路径 托管文件 使用 xp c
  • 没有特定表的MSSQL数据库备份

    我需要在 sql 中没有特定表的情况下进行计划备份 因为如果我对该表进行备份 将需要很长时间 我需要从备份中排除一张表 是否可以 如果没有该表 所有表和数据都应该位于数据库中 除了 PRIMARY 文件组之外 您还可以为该表设置一个单独的文
  • 如何防止用户生成的 Sql 查询上的 Sql 注入

    我有一个项目 私有的 ASP net 网站 受 https 密码保护 其中要求之一是用户能够输入直接查询数据库的 Sql 查询 我需要能够允许这些查询 同时防止它们对数据库本身造成损坏 以及访问或更新它们不应该访问 更新的数据 我制定了以下
  • 每次都在django查询数据库中过滤查询集吗?

    想象一下我有以下代码 qs Users objects all list for i in range 10 list append qs filter age i 这里过滤器被调用 10 次 它是连接到数据库 10 次还是第一次使用过滤器
  • DBCC命令是存储过程还是函数?

    应该是什么DBCC命令被调用 DBCC 过程还是 DBCC 函数 这很令人困惑 因为DBCC PAGE可以在不加前缀的情况下执行EXEC语句很像存储过程 但EXEC DBCC PAGE 1 1 1 3 抛出错误 语法错误 消息 156 关键
  • 如何从时区名称获取时区偏移量

    我有一个时区名称 例如America Vancouver保存在 SQL Server 数据库中 我想从 SQL 中的时区名称获取 UTC 偏移量 例如America Vancouver has 08 00抵消 那么如何用 SQL 编写查询呢
  • 将 Mdb 转换为 Sql Server

    如何使用 C 或其他语言将 mdb 访问文件转换为 sql server 我找到了一个article http channel9 msdn com forums TechOff 234266 Convert MS Access DB to
  • 默认情况下 dbo 架构中的 EF 6 Code First __MigrationHistory

    我是代码优先实体框架的新手 第一次运行我的应用程序后登录数据库时 当我看到 MigrationHistory 表时 我有点困惑 我现在了解对此表的需求 但不喜欢它位于用户表内的标准 dbo 模式中 我认为它很唐突且有风险 我的第一个想法是将
  • SQL FORMAT 函数错误

    这个SQL select FORMAT lNum from rpt myView 产生以下错误 参数数据类型 varchar 对于格式的参数 1 无效 功能 lNum is a varchar 10 运行 SQL Server 2012 v
  • 查找 SQL Server 中表的 B 树高度

    由于数据库数据以B Tree的形式组织在8k页中 对于PK信息也是如此 数据库中的每个表都应该可以计算B Tree的高度 从而揭示达到某些数据需要多少次跳跃 由于行大小和 PK 大小都非常重要 因此很难计算 因为例如varchar 250
  • Linq 选择与另一个表中的 ID 相等的项目

    我不确定这怎么可能 但我有两个表 我想通过表 1 的值从表 2 中获取值 表 1 有一个名为 rank 的外键 它是int 表 2 有一个名为 name 的值 它是string 现在表 1 的 排名 与表 2 的 ID 相关 所以当我说 v
  • ELMAH 错误和经典 Asp

    我们已经在我们拥有的 ASP NET MVC 网站上使用 ELMAH 进行错误日志记录 但我们的主网站仍然是经典的 asp 我已经开始为该网站创建错误处理 日志记录结构 但我认为它如果我们能够在所有应用程序中保持错误日志记录的一致性 那就太
  • 从 CTE 插入

    WITH DTL AS SELECT CMPI CODE CMN CDTY MTRL CMI WT FACTOR CMI CNTRCT RATE PL PRESENT PRICE TRM CODE ROUND NVL PRESENT PRI
  • 查询链接服务器时登录失败

    我正在尝试在 SQL Server 中创建链接服务器 Create the link to server uranium EXEC master dbo sp addlinkedserver server N uranium srvprod
  • 是否可以更新 amazon dynamodb 中的哈希键?

    我想更新 amazon dynamodb 表中的哈希键值 我在同一张表中也有一个范围键 是否有可能做到这一点 您无法更新哈希键值 您必须删除并重新创建该项目 这是相关的aws文档http docs aws amazon com amazon
  • 查询从同一表中的另一条记录获取值并按大于间隙阈值的差异进行过滤

    我将数据导入到 MS Access 中的临时表中 如下所示 我添加了需要使用 SQL 查询计算的 Gap 和 Previous Current 列 间隙阈值 是用户输入或范围提供给查询和例如是 300 GlobalID 对 ItemID 进
  • Delphi XE5 FireDAC 错误:无法加载供应商库 [libmysql.dll 或 libmysqld.dll]

    我在 Windows 7 64 位上使用 Delphi XE5 只是尝试 FireDAC 组件 我正在使用一个 TFDConnection 组件连接到本地 MySQL 数据库 v5 6 15 我已经将 libmysql dll 32位 v5
  • SSIS Master 包执行来自另一个项目的包

    我有多个SSIS项目 但其中的一些包是相同的 我想创建一个包含所有内容的项目generic包并将其他项目与他们的特定包一起保存 所以我的问题是 是否有可能有一个主包可以执行并将父变量传递给另一个项目的包 我是 SSIS 新手 如果这是一个明
  • 随机排列每行的列值

    我正在使用 C NET 开发多项选择题考试生成器 每次做出报告时 都会在数据库中随机挑选问题 并随机调整选项 我可以做随机问题部分 但我不能做选择的洗牌 我有一张表 其中一行如下 question answer distractor1 di
  • JbdcTemplate - 带有动态 SQL 查询的PreparedStatements

    I know jdbcTemplate可以用来创建PreparedStatements如果你这样设置 i e private JdbcTemplate jdbcTemplate String sqlQuery Select from tab

随机推荐

  • 无法绑定到 Openshift 上的端口

    我在 openshift 上的应用程序中运行嵌入式 activemq 消息服务器 根据this 你只能绑定15000 35530 我尝试执行以下操作 但它引发了严重错误 可能是什么问题 我正在使用弹簧 这是我的一部分applicationC
  • 使用 ggplot() 和 bsts() 包通过 MCMC 进行贝叶斯时间序列分析生成 BSTS 平均绝对百分比误差 (MAPE) 图

    Problem 我有一个名为 FID 的数据框 见下文 其中包含 年 和 月 两列以及 Sighting Frequency 鸟类计数 数据框包含3 years之间的观察值2015 2017 表示我有 36 个月的数据 我已经运行了使用 M
  • 从终结器中调用 GC.SuppressFinalize()

    我正在开发一个类 在该类中我必须处理托管和非托管资源 看起来像这样 显然 只有处理部分 class MyDisposingExample IDisposable public void Dispose Dispose true privat
  • 如何计算文件的熵?

    如何计算文件的熵 或者我们只说一堆字节 我有一个想法 但我不确定它在数学上是否正确 我的想法如下 创建一个包含 256 个整数 全为零 的数组 遍历文件及其每个字节 增加数组中相应的位置 最后 计算数组的 平均值 将计数器初始化为零 对于数
  • SortedSet<>.Contains() 如何实现自己的比较?

    我想检查具有给定值的对象是否存在于SortedSet lt gt 但我不明白自定义比较在这里是如何工作的 在List lt gt Exists 我可以只使用 lambda 但我不能在那里这样做 而且我没有得到整个界面的东西 而 msdn 说
  • R 中零值之间向量的元素之和

    我有一个带有零和正数的向量 我只想将这些数字相加between零点 一个简单的例子 x lt c 0 0 0 0 0 1 23 24 54 12 1 23 0 0 0 0 1 23 56 76 0 1 13 也就是说 我想对元素求和1 23
  • 如何让 Chrome 尊重我的字段名称而不是尝试自动完成

    我的主页上有两种不同的表单 一种用于登录 一种用于注册 从代码中可以看出 表单具有不同名称的输入 h3 Log In h3
  • 我可以使用 android.preference 包执行数据库特定操作吗?

    我需要一个数据库 可以在其中存储数据并在需要时获取数据 这可以通过 android preference 包实现吗 我不想使用 sqlite 数据库 regards 根据共享偏好 Android 开发者教程 第 13 部分 作者 Sai G
  • 使用 Electron-packager 时,我们可以在没有安装 Node 的 Mac 上启动 Node 命令吗?

    当我使用电子打包器打包电子应用程序时 该应用程序生成一个使用 node 命令的子进程 现在 如果我尝试在未安装节点的系统中启动我的应用程序 该应用程序可以运行吗 我一直在尝试实现这一目标并面临各种问题 电子社区建议我使用 fork 方法 s
  • avcodec YUV 转 RGB

    我正在尝试使用 libswscale 将 YUV 帧转换为 RGB 这是我的代码 AVFrame RGBFrame SwsContext ConversionContext ConversionContext sws getCachedCo
  • 从c文件中提取头名称的正则表达式

    如何从包含这样的 c 文件中提取标头 include
  • Grunt、NPM 和 Bower 之间的区别(package.json 与 Bower.json)

    当我想添加一个包 并将依赖项签入 git 时 它属于哪里 进入package json或进入bower json 据我收集的信息 跑步bower install将获取包并将其放入 vendor目录 跑步npm install它会获取它并将其
  • 二叉树递归函数

    我需要打印出一个如下所示的二叉树 x x x x x x x x x x x x x x x xxxxxxxxxxxxxxxx 使用递归打印该行的左侧和右侧 第一行除外 因此该函数将调用带有左起点和右终点参数的显示函数 然后它会调用自己两次
  • Docker:如何从给定容器访问另一个容器中的文件?

    基本上我有一个主目录和图书目录 一般文件结构 还有更多 但这些是重要的部分 因此 当我从 main 向 booksServer 发出请求时 它不起作用 因为节点模块丢失 这是因为节点模块位于 docker 容器内的特定路径 usr src
  • 网络个人资料有什么用?

    我偶然发现了这个项目ASP NET Web 配置文件生成器 为什么我需要代理类来访问配置文件 因为 ASP NET 仅支持带有 网站 选项的开箱即用的配置文件 如果您使用的是 Web 应用程序项目 WAP 那么您必须推出自己的项目 问题源于
  • JAX-RS 未能注入 @EJB 或 @Inject

    我正在尝试测试最小的 JAX RS EJB CDI 注入机制 但目前由于 GlassFish 由于某种原因无法注入而遇到了障碍 使用 Inject 将抛出 NPE 因为 GlassFish 无法注入 POJO 我的 beans xml 仅包
  • 使用 Cerberus 验证两个参数具有相同数量的元素

    有没有办法拥有Cerberus验证两个字段是否具有相同数量的元素 例如 该文档将验证 a 1 2 3 b 4 5 6 这不会 a 1 2 3 b 7 8 到目前为止 我已经想出了这个模式 a required False type list
  • Java Double 初始化为 0.0

    我有一个 bean 其中有一个字段 CustAmount 它是双倍的 我尝试测试该 bean 但我似乎不理解这一点 当我在本地计算机上运行时 它在实例化时初始化为 0 0 当我在 Linux 测试环境中运行相同的代码时 它仍然为空 由于检索
  • 如何在mysql中批量插入插入的id

    我试图使用此查询在 mysql 表中插入多行后获取 insertid insert into sometable id candidateid createdby values 61 3175 1425 60 3175 1425 42 31
  • SQL Server 计算切换间隔秒数

    我有一个这样的表 Value TimeStamp 1 2016 04 01 00 01 09 000 0 2016 04 01 00 01 09 000 0 2016 04 01 00 01 37 000 1 2016 04 01 00 0