2012-11-12 69 views
3

我有一個查詢字段datehourvalue
它看起來是這樣的訪問對分區數據的查詢並對每個分區求和?

date  hour value 
    xx/xx/xx  15  100 
    xx/xx/xx  30  122 
    xx/xx/xx  45  50 
    ...   100  100 
    ...   115  23 
    ...   ...  ... 
    ...   ...  ... 
    ...  2400  400 
    ...   15  23 

基本上,date是日期,hour是小時,value是特定每隔15分鐘的值。我一直試圖弄清楚的是每小時(如15,30,45和100)或(1015,1030,1045,1100)採取的一種方式[如你所看到的,小時是軍事式的,下午1點是1300和午夜2400],並將它們的值相加。所以我期待回到這樣的事情:

xx/xx/xx 100  372 
    xx/xx/xx 200  23 + (130 data) + (145 data) + (200 data) 

等等...... 表平均有大約100天,他們都開始從15到2400遞增15與值列不同數量。

我曾考慮過如何使用分區,分組等,沒有真正的想法如何解決它。本質上,我必須採取4行(一小時),總結它們的值,吐出日期,小時和總計值,然後每天重複。我不是要求代碼,只是一些與我應該使用的幫助,因爲這似乎是一個簡單的問題,而不是解決它的關鍵。

任何幫助非常感謝,謝謝!

回答

0

按小時/ 100分組幾乎會讓你在那裏 - 從小時減1將使1 AM下降到99,幷包括在分組中。這將給出如下查詢:

SELECT Table1.Dte, Int(([tme]-1)/100) AS Hr, Sum(Table1.Val) AS TotVal 
FROM Table1 
GROUP BY Table1.Dte, Int(([tme]-1)/100); 
+0

完美無瑕!榮譽給你和勞倫斯!你的代碼工作完美,沒有打嗝,所有的數據都按照正確的時間彙總。感謝您的幫助,我會分析您的方法,以便下次更好地理解! – Brian

+0

@Brian這不提供請求的輸出。對於小時'100',它返回'0'。那是對的嗎? – ErikE

+0

@ErikE,從問題的這一部分:*(so 15,30,45和100)或(1015,1030,1045,1100)* – SeanC

0

我可能記錯了,你怎麼投在訪問INT,但是這可能工作:

Select 
    [date], 
    100 * (1 + Cint(([Hour] - 1)/100)), 
    Sum(Value) 
From 
    Query 
Group By 
    [date], 
    100 * (1 + Cint(([Hour] - 1)/100)) 
Order By 
    1, 2 
+0

這很美!它似乎是增加了100,115,130,145而不是115,130,145,200,但我沒有抱怨,我應該能夠解決這個問題。非常感謝您的快速解決方案! – Brian

+0

我正要選擇你的答案,但我注意到下面的兩個,而肖恩的時間增加了,但是再次感謝你! – Brian

0
SELECT 
    DateCol, 
    Int(HourCol \ -100) * -100 AS Hr, 
    Sum(Value) AS Value 
FROM 
    YourTable 
GROUP BY 
    DateCol, 
    Int(HourCol \ -100) * -100 

或者您可以使用((Hr + 99) \ 100) * 100

+0

謝謝!你的方法也行得通,但時間不能正確顯示,這是一個簡單的修復,但我選擇肖恩的答案,因爲他的工作蝙蝠。感謝您編寫的代碼,並感謝您的快速響應! – Brian

+0

對不起......我錯過了你正在四捨五入,並沒有下降。我修好了它。這個表達式是最簡單的答案,因爲它返回你所要求的值。 – ErikE