2017-07-27 33 views
1

我有開始和結束日期如下表:使用DATEDIFF()結果在DSum()函數

dataid  TS     EndTS   
1744 7/27/17 1:57:34 PM 7/27/2017 1:57:38 PM  
1743 7/27/17 1:57:31 PM 7/27/2017 1:57:34 PM 
1742 7/27/17 1:57:23 PM 7/27/2017 1:57:31 PM  
1741 7/27/17 1:57:16 PM 7/27/2017 1:57:23 PM 
1740 7/27/17 1:57:04 PM 7/27/2017 1:57:16 PM  
1739 7/27/17 1:56:57 PM 7/27/2017 1:57:04 PM  
1738 7/27/17 1:56:38 PM 7/27/2017 1:56:57 PM 

我想獲得的日期/時間間隔(以秒爲單位),然後計算運行總。

這是我到目前爲止有:

SELECT 
    [dataid] AS [dataid] 
    DateDiff("s", [TS],[EndTS]) AS [durationsec] 
    DSum("[durationsec]","[HX32]","[dataid] <=" & [dataid]) AS [add] 

FROM [HX32]; 

我認爲DATEDIFF()funtion可能是導致格式問題。隨着"[durationsec]"我得到的所有空的結果,[durationsec]我得到如下結果:

durationsec add 
     4 6896 
     3 5169 
     8 13776 
     7 12047 
     12 20640 
     7 12033 
     19 32642 

我也試過cint(DateDiff("s", [TS],[EndTS]))沒有變化。 我也試着將durationsec傳遞給一個表並運行一個單獨的查詢。不用找了。 (此外,我寧願做這一切在一個查詢)

下面是結果我想實現:

dataid  TS     EndTS   durationsec add 
1744 7/27/17 1:57:34 PM 7/27/2017 1:57:38 PM 4  60 
1743 7/27/17 1:57:31 PM 7/27/2017 1:57:34 PM 3  56 
1742 7/27/17 1:57:23 PM 7/27/2017 1:57:31 PM 8  53 
1741 7/27/17 1:57:16 PM 7/27/2017 1:57:23 PM 7  45 
1740 7/27/17 1:57:04 PM 7/27/2017 1:57:16 PM 12  38 
1739 7/27/17 1:56:57 PM 7/27/2017 1:57:04 PM 7  26 
1738 7/27/17 1:56:38 PM 7/27/2017 1:56:57 PM 19  19 

謝謝,我是一個初學者。

+0

我通過計算DATEDIFF運行後DSUM在另一個查詢解決。看來你不能在同一個查詢中將生成的值datediff值傳遞給dsum,或者在dsum函數內部有一個datefiff函數。 –

+0

我剛剛測試過,它可以在嵌套在DSum中的DateDiff中工作。編輯我的答案以顯示完整的SQL。 – June7

回答

1

DSum正在查看[HX32]表或查詢來查找名爲[durationsec]的字段。它不存在那裏。

SELECT 
    [dataid], 
    DateDiff("s",[TS],[EndTS]) AS [durationsec], 
    DSum("DateDiff('s',[TS],[EndTS])","[HX32]","[dataid] <=" & [dataid]) AS [add] 
FROM [HX32];` 

請注意使用撇號來分隔嵌套的DateDiff中的's'參數。

另一種方法是在報表中執行運行總和,因爲報表中的文本框具有RunningSum屬性。查詢中的域集合函數可以在大型數據集中緩慢執行。

+0

你在說什麼總是有道理,但是我仍然因爲'add'而得到所有的空值。 –

+0

我用你的示例數據創建了表格,查詢使用嵌套的DateDiff。編輯答案顯示完整的SQL和更多信息。 – June7

1

時間不秒,但整數天,所以你可以嘗試:

SELECT 
    [dataid], 
    DateDiff("s", [TS], [EndTS]) AS [durationsec], 
    DSum("[EndTS]-[TS]", "[HX32]", "[dataid] <= " & [dataid] & "") * 86400 AS [add] 
FROM 
    [HX32]; 

也就是說,六月的方法應該正常工作。如果兩者都失敗了,還有其他事情正在發生。

+0

我試了兩個(相同的結果)。也許其他事情正在發生。我做了一個新表,然後從頭開始查詢以進行測試。感謝您的輸入。 –

1
SELECT dataid, 
     startts, 
     endts, 
     DATEDIFF("s", startts,endts) AS durationsec, 
     SUM(DATEDIFF("s", startts,endts)) OVER (ORDER BY endts ROWS UNBOUNDED PRECEDING) AS runningtotal 
    FROM durtab 
ORDER BY 5 DESC; 

結果:

dataid startts endts durationsec runningtotal 
1744 2017-07-27 13:57:34.000 2017-07-27 13:57:38.000 4 60 
1743 2017-07-27 13:57:31.000 2017-07-27 13:57:34.000 3 56 
1742 2017-07-27 13:57:23.000 2017-07-27 13:57:31.000 8 53 
1741 2017-07-27 13:57:16.000 2017-07-27 13:57:23.000 7 45 
1740 2017-07-27 13:57:04.000 2017-07-27 13:57:16.000 12 38 
1739 2017-07-27 13:56:57.000 2017-07-27 13:57:04.000 7 26 
1738 2017-07-27 13:56:38.000 2017-07-27 13:56:57.000 19 19 
+0

這是否工作在MS訪問? (我正在使用2010),它在OVER()func –

+1

處給我一個語法(缺少操作符)錯誤。Access無法識別所有SQL函數或操作。 – June7