2012-03-22 66 views
1

我已經將數據集上的任務委託給從其他數據源預提取的數據集,並且我目前只有Access可用於查詢此數據(Excel的基本數據分析較少比目前的行限制)。從本質上講,我有三個相關領域:用於提取時間戳差異的SQL查詢

FK_ID =與交易的狀態相關聯的交易

CD =代碼關聯任意數量(只承擔BEGIN和END是值)

TIMESTAMP =的時間戳交易

現在這個數據集的一個簡單的例子:

FK_ID   CD     TIMESTAMP 
000012   END    2012-01-02-14.27.59.133612 
000012   BEGIN    2012-01-02-14.27.57.176631 
000015   END    2011-12-12-14.27.59.133612 
000015   BEGIN    2011-12-11-14.27.59.133612 
000019   END    2011-11-10-14.27.59.133612 
000019   BEGIN    2011-11-09-14.27.59.133612 
000019   END    2011-11-08-14.27.59.133612 
000019   BEGIN    2011-11-07-14.27.59.133612 

正如你所看到的,它不是版本y複雜,問題是我需要計算每個唯一FK_ID的BEGIN和END代碼之間的時間戳差異,然後創建一個列來計算該差異,同時也解釋了一些FK_ID具有與多個時間戳BEGIN/END對關聯的事實他們。

現在我已被授權忽略存在多於一對的情況(通過忽略,我的意思是隻計算最初的一對),但它不是優選的。

我需要獲得這些差異,以確定總平均時間,以確定該時間是否在我們的目標範圍內。

對於每個FK_ID對或您建議的其他自動化方式獲取此時間戳差異的最佳查詢是什麼?

我的確瞭解SQL並且在C#中精通足夠,但時間框架和其他因素對我的邏輯分解能力造成了巨大破壞。

+2

您正在使用哪種RDBMS? – 2012-03-22 04:17:45

+0

這是什麼來自我不知道,我只能訪問一個電子表格,我不得不導入到Access(我相信這是Jet Engine)。我無法訪問源數據庫,並且由於我們的基礎架構,無法獲取訪問權限,並且除了作爲大型機作業之外,不能運行查詢。 – 2012-03-22 04:22:07

+0

您是否可以確保在相同fk_id的時間戳中不會有重疊。換句話說,每個START後跟STOP,而不是另一個START。 – 2012-03-22 04:22:07

回答

2

假設表名是表1,在訪問我會做這樣的事情:

SELECT Table1.FK_ID, DateDiff("s",[TABLE1].[TIMESTAMP],[END_QUERY].[TIMESTAMP]) AS DifferenceInSeconds 
FROM Table1 

INNER JOIN 

(SELECT Table1.FK_ID, Table1.CD, Table1.TIMESTAMP 
FROM Table1 
WHERE (((Table1.CD)="END")) 
ORDER BY Table1.FK_ID, Table1.CD) AS END_QUERY 


ON Table1.FK_ID = END_QUERY.FK_ID 
WHERE (((Table1.CD)="BEGIN")) 
ORDER BY Table1.FK_ID, Table1.CD; 

基本上得到所有的BEGIN和兩個子查詢END並獲得查詢之間的差異(以秒爲 - 您沒有提到這部分)。你會遇到的一個問題是一個交易有多個條目。你可以做一個GROUP BY來得到第一個BEGIN和最後的END,但它們可能會有一些差異。

我希望這可以幫助你一點。

+0

+1,因爲它不能加入常量值,所以發佈了一些與JET協同工作的東西。 – 2012-03-22 05:21:36