sql查询解决以下问题

2024-03-12

我必须在 sql server 中使用下表:

date                 |   status  

2009-01-01 12:00:00      OK
2009-01-01 12:03:00      FAILED
2009-01-01 12:04:00      OK
2009-01-01 12:06:20      OK
2009-01-01 12:07:35      FAILED
2009-01-01 12:07:40      FAILED
2009-01-01 12:20:40      FAILED
2009-01-01 12:25:40      OK

我需要以下内容:从 2009-01-01 12:00:00 开始,从该日期起每 10 分钟我需要查看 OK 和 FAILED 的数量。

就像是:

INTERVAL                                  FAILED      OK
2009-01-01 12:00:00-2009-01-01 12:15:00    1           2
2009-01-01 12:15:01-2009-01-01 12:30:00    0           1

etc..

在sql中执行此操作的最佳方法是什么?


好吧,首先..

您提到 10 分钟,并提供了 15 分钟的示例。此外,您的示例数据应该返回与您发布的结果不同的结果。

solution使用枢轴

Declare @datetimestart datetime
Declare @interval int
Set @datetimestart = '2009-01-01 12:00:00'
Set @interval = 15

Select
  *
From
  (
    Select 
     DateAdd( Minute,Floor(DateDiff(Minute,@datetimestart,[date])/@interval)*@interval
,@datetimestart), 
    DateAdd( Minute,@interval + Floor(DateDiff(Minute,@datetimestart,[date])/@interval)*@interval
,@datetimestart) 
, status
    From dtest
  ) As W([from],[to], status)
Pivot (Count(status) For status In ([ok],[failed])) p

这将返回

From                       To                       Ok  Failed
2009-01-01 12:00:00.000 2009-01-01 12:15:00.000     3   3
2009-01-01 12:15:00.000 2009-01-01 12:30:00.000     1   0

评论后更新

此版本将包括数据库中没有值的时间间隔。 我们需要动态创建一个临时表..

Declare @datetimestart datetime, @datetimeend datetime, @datetimecurrent datetime
Declare @interval int
Set @datetimestart = '2009-01-01 12:00:00'
Set @interval = 10
Set @datetimeend = (Select max([date]) from dtest)

SET @datetimecurrent = @datetimestart

declare @temp as table ([from] datetime,[to] datetime)
while  @datetimecurrent < @datetimeend
BEGIN
  insert into @temp select (@datetimecurrent), dateAdd( minute, @interval, @datetimecurrent)
  set @datetimecurrent = dateAdd( minute, @interval, @datetimecurrent)
END

Select
  *
From
  (
    Select 
      [from],[to], status
    From @temp t left join dtest d on d.[date] between t.[from] and t.[to]
  ) As W([from],[to], status) 
Pivot (Count(status) For status In ([ok],[failed])) p

现在使用 10 分钟间隔来显示没有值的时间段,返回..

From                       To                       Ok  Failed
2009-01-01 12:00:00.000 2009-01-01 12:10:00.000     3   3
2009-01-01 12:10:00.000 2009-01-01 12:20:00.000     0   0
2009-01-01 12:20:00.000 2009-01-01 12:30:00.000     1   0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sql查询解决以下问题 的相关文章

  • Sql 查询抛出标识符太长。最大长度为 128

    我正在处理一个简单的更新查询 在执行查询时看到以下错误 我非常清楚 这根本不应该是一个长度问题 可能是什么问题 Error 以identifier开头的标识符太长 最大长度为 128 我的查询 update dbo DataSettings
  • SQL查询多行变成单行

    有什么方法可以将通常返回具有相同值的多行的 SQL 查询更改为单行吗 例如 如果我现有的查询返回以下内容 ColA ColB 1 AA 1 BB 1 CC 2 AA 3 AA 我可以将查询更改为仅返回 3 行 并将 1 的第二个和第三个结果
  • 如何从 SQL Server 中的存储过程检索参数列表

    使用 C 和 System Data SqlClient 有没有办法在实际执行 SQL Server 上的存储过程之前检索属于该存储过程的参数列表 我有一个 多环境 场景 其中同一数据库模式有多个版本 环境的示例可能是 开发 暂存 和 生产
  • TSQL - 创建从日期表,同时忽略带条件的中间步骤

    我在 MS SQL 服务器中有以下表结构 现在 我想根据以下规则获取每个 id 的 in 日期 如果第二天 23 59 出 和 00 00 进 则忽略这些 如果同一天有 out 和 in 请忽略这些 例如我应该得到以下结果 id in ou
  • Sql Server 字符串到日期的转换

    我想像这样转换一个字符串 10 15 2008 10 06 32 PM 转换为 Sql Server 中的等效 DATETIME 值 在 Oracle 中 我会这样说 TO DATE 10 15 2008 10 06 32 PM MM DD
  • TSQL 定义临时表(或表变量)而不定义架构?

    有没有一种方法可以定义临时表而无需预先定义其架构 实际上 使用表 VARIABLE 内存表 是最佳方法 table 在临时数据库中创建一个表 而 table 是全局的 两者都具有磁盘命中 考虑交易数量所经历的放缓 打击 CREATE PRO
  • Sequelize mssql:按主键和限制排序

    我想运行一个使用主键对结果进行排序的查询 并限制返回结果的数量 例如 return Things findAll attributes id status otherField limit 2 order id DESC 构建查询时 会生成
  • 如何将 LEFT JOIN 限制为 SQL Server 中的第一个结果?

    我有一些 SQL 几乎可以做我想做的事情 我正在使用三个表 Users UserPhoneNumbers 和 UserPhoneNumberTypes 我正在尝试获取用户列表及其电话号码以供导出 数据库本身很旧并且存在一些完整性问题 我的问
  • 如何将存储过程中的值返回到 EF

    我试图通过 EF 调用存储过程并从存储过程中检索返回值 我用过this https stackoverflow com questions 6861737 executesqlcommand with output parameter an
  • 别名 .\SQLEXPRESS 为 (LocalDB)\MSSQLLocalDB

    I have SQLEXPRESS已安装 但代码假设我有一个名为 LocalDB MSSQLLocalDB 如何创建别名以便不必安装SQLLocalDb 启动 Sql Server 配置管理器 使用以下参数为 64 位 SQL Native
  • 如何使用 RODBC 将数据帧保存到数据库生成的主键表

    我想使用 R 脚本将数据框输入到数据库中的现有表中 并且希望数据库中的表具有顺序主键 我的问题是 RODBC 似乎不允许主键约束 这是创建我想要的表的 SQL CREATE TABLE dbo results ID INT IDENTITY
  • 如何:使用 SQL Server 2008 创建自动更新修改日期的触发器

    很高兴知道如何创建一个自动更新的触发器modifiedDate我的 SQL Server 表中的列 Table 时间输入 Id PK UserId FK Description Time GenDate ModDate 触发代码 TR Ti
  • 如何检查是否启用了更改跟踪

    我试图在运行之前确定我的数据库是否已启用更改跟踪ALTER DATABASE命令来启用它 我试图防止这些脚本多次运行时出现错误 我签到了sys databases and sys dm tran commit table但无法找到我要找的东
  • 如何更新 SQL Server 中 ntext 列中的 XML 字符串?

    有一个包含 2 列的 SQL 表 ID int 和值 ntext 值行中包含各种 xml 字符串 ID Value 1
  • 确定一个范围是否完全被一组范​​围覆盖

    如何检查范围是否为完全覆盖由一组范围 在以下示例中 WITH ranges id a b AS SELECT 1 0 40 UNION SELECT 2 40 60 UNION SELECT 3 80 100 UNION SELECT 4
  • SQL Server 到 er 模型

    是否有程序可以将 SQL Server 数据库图表转换为 er 模型 或者从 SQL Server 服务器创建数据库的 er 模型 在 SQL Server 中 Management Studio 中的每个数据库都有 数据库图 功能 您可以
  • 扁平化/反规范化 SQL 查找表的最佳方法?

    我有很多这样的表 Lookup HealthCheckupRisks ID Name 1 Anemia 2 Anorexic 3 Bulemic 4 Depression 122 Syphilis PatientRisksOnCheckup
  • SQL中如何合并多个表的数据

    我想我的处境很复杂 这是场景 我在 SQL Server 中有 3 个表 注册 学生 课程 仅供参考 没有外键 表的列是 Student 学生号 学生名 Course 课程 ID 课程名称 注册 注册 ID 学生 ID 课程 ID 课程结果
  • 有很多数据库视图可以吗?

    我很少 每月 每季度 使用 Microsoft SQL Server 2005 数据库视图生成数百份 Crystal Reports 报告 在我不读取这些视图的所有时间里 这些视图是否会浪费 CPU 周期和 RAM 因为我很少从视图中读取数
  • 安装 SQL Server 2012 错误“系统无法打开指定的设备或文件。”

    我正在尝试在已安装 SQL Server 2008 R2 Express 和 Windows 7 的计算机上安装 SQL Server 2012 Developer 我使用 Microsoft Secure Download Manager

随机推荐