2017-01-16 40 views
0

我想創建一個表的值在同一行,但不同的列,作爲一個特定的日期和時間。MS訪問表不包括小時00

舊錶

YYYY-MM-DD HH:00:01;值1

YYYY-MM-DD hh:00:02;值2

並且新表格將分組並取分配給同一小時的值的平均值。

新表

YYYY-MM-DD 01:00;平均(值1和值2)

在VBA的SQL代碼工作得很好,但會跳過寫入相關聯的至00:00

2016-12小時和分鐘-05 23:00; 56

2016-12-06; 68

2016-12-06 01:00; 70

任何人都可以告訴我爲什麼這樣做,也許指出代碼中的錯誤?

目標

2016年12月5日23:00; 56

2016-12-06 00:00; 68

2016-12-06 01:00; 70

代碼

Sql = "INSERT INTO LoggedData (Date, Value) " 

Sql = Sql & "SELECT Format([Date],'yyyy/mm/dd hh') & ':00' AS wDate, Avg(tmp_LoggedData.Value) AS wValue" 

Sql = Sql & "FROM tmp_LoggedData " 

Sql = Sql & "WHERE Format([Date], 'yyyy/mm/dd hh:mm')" 

Sql = Sql & "GROUP BY Format([Date],'yyyy/mm/dd hh') & ':00';" 
+0

這聽起來像你所描述的默認日期/時間在Access格式。有關詳細信息,請參閱[此答案](http://stackoverflow.com/a/26587881/2144390)。 –

+0

好的!我認爲,通過形式化([Date],yyyy/mm/dd hh:mm),我會包括午夜。但是,它並沒有真正做到這一點 – Rod

+0

我懷疑發生了什麼:你的'Format'函數正在創建一個明確包含'00:00'時間分量的日期/時間字符串。這被解析成真正的日期/時間值並插入到新表中。然後,當您查看新表格中的值時,您會看到Access默認的日期/時間格式,即在時間恰好是午夜時忽略時間分量。 –

回答

0

打出來的日期和時間爲單獨的列,然後將它們分組...使用此作爲一個子查詢您的插入

insert into LoggedData (Date, Value) 
select TheDate + timevalue(TheTime + "00:00"), AvgValue 
from (
     select format([Date],"YYYY-MM-DD") as TheDate, 
      hour([Date]) as TheHour, 
      avg(tmp_LoggedData.Value) as AvgValue 
     from tmp_LoggedData 
     group by format([Date],"YYYY-MM-DD"), hour([Date]) 
    ) 
0

你的其中子句沒有意義,你錯過了一個空間,所以試試這個:

Sql = "INSERT INTO LoggedData ([Date], Value) " 
Sql = Sql & "SELECT Format([Date],'yyyy/mm/dd hh:00') AS wDate, Avg(tmp_LoggedData.Value) AS wValue " 
Sql = Sql & "FROM tmp_LoggedData " 
Sql = Sql & "GROUP BY Format([Date],'yyyy/mm/dd hh:00');" 

輸出示例:

Date    AvgValue 
2012-01-03 00:00 8 
2012-01-03 01:00 3 
2012-01-03 02:00 5 
2013-03-04 00:00 5 
2013-03-04 05:00 4 
+0

謝謝!但仍然,午夜時分仍然缺失,我認爲我需要包括一些格式 – Rod

+0

奇怪。這裏並沒有失蹤。你以後是否應用其他格式? – Gustav

+0

請參閱編輯答案與輸出。 – Gustav