2012-12-15 50 views
0

我有兩個臨時表,它們爲應用程序提供了特定的作業運行時間。我想報告每個月的平均工作時間。然後注意差異。SQL查詢 - 查找百分比改進或兩個表值之間的百分比下降

構建臨時表的第一個查詢將輸出第一個月的平均作業時間,第二個臨時表包含第二個月的平均作業時間。

我想比較每項工作的百分比差異,測量第二個月與第一個月之間的差異。

下面是一個例子查詢建立兩個臨時表:一月的工作時序

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 

由於

--temp表二月份的工作時序

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 

--temp表如上所述,我想在兩個月之間的每個工作查詢中查找百分比差異。

+0

有你看着LEAD和LAG功能? – Randy

+0

您使用的是哪個版本的SQL Server?它可能會影響答案。 – HABO

+0

尚未使用LEAD或LAG函數。使用sql 2000服務器 – user1133448

回答

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/

+1

不同意m1.jobtime - m2.jobtime。我認爲這應該是相反的,因爲如果'm2'值大於'm1'值,百分比值看起來更爲自然,而不是負值。 –

+0

你是對的,安德烈。我相應地更新了代碼。 –

+0

感謝您的輸入。聖誕節假期過後會試試這個,並且告訴你它是如何發生的。 – user1133448