【问题标题】:SQL Query-Find percentage improvement, or percentage decline between two tables valuesSQL Query-Find 百分比改进,或两个表值之间的百分比下降
【发布时间】:2012-12-15 20:47:51
【问题描述】:

我有两个临时表,它们为我提供了应用程序的特定作业运行时间。我想报告每个月的平均工作时间。然后注意差异。

第一个构建临时表的查询将输出第一个月的平均工作时间,第二个临时表包含第二个月的平均工作时间。

我想比较每个工作的百分比差异,衡量第二个月与第一个月之间的差异。

以下是构建两个临时表的示例查询:

--二月份工作时间的临时表

CREATE TABLE #JobTimings_FEB(jobtime int, PRCSINSTANCE int ,
PRCSNAME char (30), PRCSTYPE char (30), RUNSTATUS char (30), 
OPRID char (30), RUNCNTLID char (30), BEGINDTTM char (30) , 
ENDDTTM char (30))--, #Executions char (10))
;
INSERT INTO #JobTimings_NEWSERV (jobtime, PRCSINSTANCE, 
PRCSNAME , PRCSTYPE, RUNSTATUS, OPRID, RUNCNTLID, BEGINDTTM, ENDDTTM)

SELECT DATEDIFF(ss,BEGINDTTM,ENDDTTM) AS jobtime, 
PRCSINSTANCE, PRCSNAME, PRCSTYPE, RUNSTATUS, OPRID, 
RUNCNTLID, BEGINDTTM, ENDDTTM
FROM PSPRCSRQST WHERE BEGINDTTM BETWEEN '2012-02-01 00:00:00.000' 
AND '2012-02-28 23:59:09.837' 
ORDER BY BEGINDTTM

--一月份工作时间的临时表

CREATE TABLE #JobTimings_JAN(jobtime int, PRCSINSTANCE int , 
PRCSNAME char (30), PRCSTYPE char (30), RUNSTATUS char (30), 
OPRID char (30), RUNCNTLID char (30), BEGINDTTM char (30) , 
ENDDTTM char (30))--, #Executions char (10))
;
INSERT INTO #JobTimings_OLDSERV (jobtime, PRCSINSTANCE, 
PRCSNAME , PRCSTYPE, RUNSTATUS, OPRID, RUNCNTLID, BEGINDTTM, ENDDTTM)

SELECT DATEDIFF(ss,BEGINDTTM,ENDDTTM) AS jobtime, 
PRCSINSTANCE, PRCSNAME, PRCSTYPE, RUNSTATUS, OPRID, 
RUNCNTLID, BEGINDTTM, ENDDTTM
FROM PSPRCSRQST WHERE BEGINDTTM BETWEEN '2011-12-04 00:00:00.000' 
AND '2011-12-17 23:59:09.837' 
ORDER BY BEGINDTTM

如上所述,我想在查询中找到两个月之间每个工作的百分比差异。

【问题讨论】:

  • 你看过 LEAD 和 LAG 函数吗?
  • 您使用的是什么版本的 SQL Server?它可能会影响答案。
  • 尚未使用 LEAD 或 LAG 函数。使用 sql 2000 服务器
  • LEAD 和 LAG 是 SQL 2012 的新功能,在 2000 年不可用

标签: sql sql-server tsql sql-server-2000


【解决方案1】:

您需要根据一些共同的值将这两个表连接在一起。如果 PRCSINSTANCE 正在识别工作,那么查询将类似于:

SELECT m1.PRCSINSTANCE ,m1.PRCSNAME , --other static columns here
100 * (m2.jobtime - m1.jobtime) / m1.jobtime AS JobtimePercentChange
-- other calculations here 
FROM #JobTimings_JAN AS m1
JOIN #JobTimings_Feb AS m2
ON m1.PRCSINSTANCE = m2.PRCSINSTANCE;

有关如何在 SQL Server 中使用联接的更多信息,请在此处查看我的联接系列:http://sqlity.net/en/1146/a-join-a-day-introduction/

【讨论】:

  • 不太同意m1.jobtime - m2.jobtime。我认为应该反过来,因为如果m2 的值大于m1 的值,那么百分比值为正而不是负似乎更自然。
  • 感谢您的意见。将在圣诞节假期后尝试一下,并更新您的进展情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-10
  • 2019-05-18
  • 2016-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多