- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 SQL Server 2012 中有一个主表(database0 中的表 0),我在其中存储有关作业对象的信息。每个作业都有唯一的 ID,并且在主表中只有一个条目(行)。对作业对象的每次修改都会在同一数据库的不同表中生成一个新行(来自 databese0 的表 1)。一段时间后,代理将行从 table1(来自 database0)移动到另一个数据库中的另一个表(来自 database1 的 table2)。基本上我将作业对象的每个更改记录到审计表中,一段时间后代理将条目从审计表移动到不同数据库中的另一个审计表。
我做了一个查询:
select t0.Job_ID,
t1.TimeStamp, t1.Status, t1.Change,
t2.TimeStamp, t2.Status, t2.Change
from [database0].dbo.[Table0] as t0
left outer join [database0].dbo.[Table1] as t1 on t1.Job_ID=t0.Job_ID
left outer join [database1].dbo.[Table2] as t2 on t2.Job_ID=t0.Job_ID
where t1.Status='Created' or t1.Change='StatusChange'
or t2.Status='Created' or t2.Change='StatusChange'
order by t0.Job_ID, t1.TimeStamp, t2.TimeStamp
返回的数据如下:
t0.JobID|t1.TimeStamp|t2.TimeStamp|t1.Status|t2.Status|t1.Change|t2.Change
--------|------------|------------|---------|---------|---------|---------
Job1 |12:00:00.000| Null | New | Null | Created | Null
Job1 |12:10:00.000| Null | Wait | Null |St.Change| Null
Job1 |12:25:00.000| Null | New | Null |St.Change| Null
Job1 | Null |12:30:00.000| Null | InProgr.| Null |St.Change
Job1 | Null |12:40:00.000| Null | Finished| Null |St.Change
--------|------------|------------|---------|---------|---------|---------
Job2 |13:00:00.000| Null | New | Null | Created | Null
Job2 | Null |13:15:00.000| Null | InProgr.| Null |St.Change
Job2 | Null |13:20:00.000| Null |Unfinish.| Null |St.Change
我需要衡量每个工作在每个状态下花费了多少时间。所以基本上,对于每个作业,我需要从作业创建到最终状态之一(完成/未完成)之间减去 TimeStamp 连续行(来自相同或不同的表),并将结果放在足够的行中。我需要得到这样的结果:
Job_ID | New | Wait | InProg. | Total_Time | Final_Status
--------|-------|--------|-----------|------------|-------------
Job1 | 15 | 15 | 10 | 40 | Finished
Job2 | 15 | 0 | 5 | 20 | Unfinished
Job1 的示例:
我不得修改现有表格。
可以使用 SQL 查询来完成类似的事情吗?最有效的方法是什么?
提前致谢
用于测试的 SQL 代码:
创建表:
USE [databasename0] -- replace databasename0 name
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[t0](
[Job_ID] [nvarchar](64) NULL,
[Attribute1] [nvarchar](64) NULL,
[Attribute2] [nvarchar](64) NULL,
)
GO
USE [databasename0] -- replace databasename0 name
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[t1](
[AuditTimeStamp] [datetime] NULL,
[Job_ID] [nvarchar](64) NULL,
[Status] [nvarchar](64) NULL,
[ChangeDescription] [nvarchar](64) NULL,
)
GO
USE [databasename1] -- replace databasename1 name with different database
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[t2](
[AuditTimeStamp] [datetime] NULL,
[Job_ID] [nvarchar](64) NULL,
[Status] [nvarchar](64) NULL,
[ChangeDescription] [nvarchar](64) NULL,
)
GO
插入:
INSERT INTO [database0].[dbo].[t0] -- replace database0 name
(Job_ID, Attribute1, Attribute2)
VALUES
('Job1','Test1','Test2'),
('Job2','Test3','Test4')
GO
INSERT INTO [database0].[dbo].[t1] --replace database0 name
(AuditTimeStamp,Job_ID,Status,ChangeDescription)
VALUES
('2017-12-21 12:00:00.000','Job1','New','Created'),
('2017-12-21 12:10:00.000','Job1','Wait','StatusChange'),
('2017-12-21 12:11:00.000','Job1','Wait','Other'),
('2017-12-21 12:25:00.000','Job1','New','StatusChange'),
('2017-12-21 12:26:00.000','Job1','New','Other'),
('2017-12-21 13:00:00.000','Job2','New','Created')
GO
INSERT INTO [database1].[dbo].[t2] -- replace database1 name
(AuditTimeStamp,Job_ID,Status,ChangeDescription)
VALUES
('2017-12-21 12:30:00.000','Job1','InProgress','StatusChange'),
('2017-12-21 12:31:00.000','Job1','InProgress','Other'),
('2017-12-21 12:40:00.000','Job1','Finished','StatusChange'),
('2017-12-21 13:15:00.000','Job2','InProgress','StatusChange'),
('2017-12-21 13:17:00.000','Job2','InProgress','Other'),
('2017-12-21 12:20:00.000','Job2','Unfinished','StatusChange')
GO
最佳答案
我预计这会有错误,但我无法测试,因为 OP 尚未提供可使用的样本数据。不过,我非常乐意在他们提供此答案后对其进行编辑(InstantE,请在完成后回复此答案,以便我收到通知)。
WITH Leads AS (
SELECT T0.JobID,
ISNULL(T1.[TimeStamp], T2.[TimeStamp]) AS [TimeStamp],
LEAD(T1.[TimeStamp], T2.[TimeStamp]) OVER (PARTITION BY T0.JobId ORDER BY ISNULL(T1.[TimeStamp], T2.[TimeStamp]) ASc) AS NextTimeStamp,
ISNULL(T1.[Status], T2.[Status]) AS [Status],
LAST_VALUE(ISNULL(T1.[Status], T2.[Status])) OVER (PARTITION BY T0.JobID ORDER BY ISNULL(T1.[TimeStamp], T2.[TimeStamp])) AS FinalStatus
FROM YourTables --I haven't included your JOIN's and WHERE here, you'll need to replace that
)
SELECT JobID,
SUM(CASE [Status] WHEN 'New' THEN DATEDIFF(MINUTE, [TimeStamp], [NextTimeStamp]) END) AS New,
SUM(CASE [Status] WHEN 'Wait' THEN DATEDIFF(MINUTE, [TimeStamp], [NextTimeStamp]) END) AS Wait,
SUM(CASE [Status] WHEN 'InProgr.' THEN DATEDIFF(MINUTE, [TimeStamp], [NextTimeStamp]) END) AS [InProgr.],
SUM(DATEDIFF(MINUTE, [TimeStamp], [NextTimeStamp])) AS Total_time,
FinalStatus
FROM Leads
GROUP BY JobID, FinalStatus;
关于sql - 如何从 MS SQL Server 2012 中的不同表中减去连续的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47940299/
我已经使用 MS Word 和一大堆表单字段创建了一个应用程序表单,并且我有一个 Access db,可以从这个 Word 文档中导入我需要的所有数据,这要归功于: http://msdn.micro
我试图找到一种将 Outlook 插件发布到办公商店的方法。但我发现我们只能发布 Office 应用程序,而不能发布 Office 商店的加载项。因此我想知道 Office 应用程序和 Office
我在 MS Reporting Services 服务器上部署了一份报告,工作正常。我可以使用 Microsoft 的报表查看器组件从 ASPX 页面毫无问题地 Access 它、设置报表参数等。效果
让我们再试一次。我发布这个是为了回答 2 个问题 MS Project 2007 是否需要 SharePoint(我希望没有)? 做 你喜欢 MS Project 开发团队 - 它是有用的还是 疼痛?
我正在执行这些星期六上午的任务之一,试图理解为什么为什么要在计算机注册表中搜索某些信息会花费大量时间,甚至迫使我停止该过程。使用这些注册表清理程序之一,我发现该代码花了数十分钟遍历如下行: HKEY_
从多年前开始,我就没有使用Access。 它能很好地解决什么样的问题,甚至比真正的RDBMS支持的Web应用程序更好? 它仍在积极开发吗?还是MS已经死了? 最大的局限性是什么? 更新: 应该使用什么
我们计划重新设计一个相当庞大的 MS Access 应用程序。有没有办法在同一应用程序上同时工作,或者是否可以合并同一文件的两个单独实例(不是数据,而是表单和代码)。现在 Access 包含数据,但在
我写了一些SQL命令来更正表中的字段。由于它是如此之小(也许我有点自大),我什至没有运行过一次,只是将其放入了更新包中供其他用户使用。 Dim SQL As String Dim rs As DAO.
它是Office自带的,是一个“中规中矩”的数据库,到今天这里有800多个问题,但我从来没有关注过它。 我失去了一些有趣的东西? 我说的是 MS-Access 作为用于快速原型(prototype)制
我有一个MS-Access数据库,该数据库已通过使用“用于Access的Microsoft SQL Server迁移助手2008”(aka SSMA)转换为使用SQL表并创建了链接表(因此,MS-Ac
我有一个 Excel 文件,其中包含从 Access 数据库(主数据库)导出的任务。然后,此 Excel 文件用作 MS Project 的导入文件。随后,MS Project 用于实际跟踪和报告,并
我正在尝试获取有关如何将 MS Project 2010 连接到 MS Project Server 2010 的教程或分步说明。 我已经在我的服务器上安装了 Server 2008 R2(64 位)
有没有办法像选择查询一样在查询中引用表单的组合框/文本框? 我通常在选择查询的条件中使用类似这样的东西: like forms!frmMain.qTitleofSomething&* (acces
我想创建一个表,其中包含 DOUBLE 实数类型的列。我可以在表设计 View 中找到数据类型 Number,但是没有 Double 或 single,Float.. 如何实现..? 我还需要 SQL
我环顾四周,发现了一些关于如何从字段的“描述”框中获取描述的 VBA 代码,但没有找到如何在表单属性中使用它的方法。 我希望出现一个 ControlTip,其中包含从数据库中的描述中带来的该字段的描述
我有一个难题。我已经开发了一个 Access 应用程序,我正准备分发它。我刚刚拆分了数据库。 (我知道,有人说我应该从一开始就把它分开开发……我没有)我也刚刚加密了后端数据库。在前端,我已链接到后端并
我制作了一个 MS Access 2013 数据库来跟踪有关交易网站的所有通信。与此问题相关的表和列是具有列 ID(编号)和链接(超链接)的广告,以及具有列广告的注释,其中包含广告 ID。链接字段包含
我与我不拥有且无法更改的数据库建立了 ODBC 连接。我要做的是使相关记录合并为一条记录。关系是一对多。 我有一个学生管理系统,想要导出一个提供自动标注服务(由调用收费)的调用列表。如果有多个学生住在
我在 Access 的表单中设置了一个文本框。该表单链接到一个表格。但是它自己的文本框是未绑定(bind)的,它用于简单地收集用户输入。但是,我无法编辑它所查看的值。 文本框未锁定。文本框可以在 VB
很难说出这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。如需帮助澄清这个问题以便重新打开它,visit the help center .
我是一名优秀的程序员,十分优秀!