在我的Rails應用程序的PostgreSQL的數據庫是包含每小時的價格爲近10年來的記錄:這些高級查詢日期分組的dilemna
10(24×365):「2012年12月31日01:00:00 」,‘11.99’
下面的查詢,團體價格按天,平均價格在那些每天分組創建每日價格平均值,並返回‘天’,‘每天平均每天’對:
HourlyPrice.average(:price, :group => "DATE_TRUNC('day', date)")
問題是,我的源數據中的小時價格實際上反映了前一小時的價格。因此,在我的數據源.CSV中,時間從01:00:00開始到24:00:00結束。
這與PostgreSQL喜歡將記錄保存在其DateTime列中的方式相沖突。在導入CSV數據後,PostgreSQL將包含時間24:00:00的記錄轉換爲第二天的00:00:00。
這拋出了我上面的平均查詢的準確性。要修復查詢,我仍然希望按天進行分組,但要抵消1小時。所以,範圍平均值從01:00:00開始,到第二天的00:00:00結束。
是否可以調整上述查詢以反映這一點?
您不必添加的PostgreSQL時,Rails,ActiveRecord的等你的問題的標題。人們可以從標籤中看到問題所在。也不需要添加你的名字和「謝謝」,甚至不需要(http://stackoverflow.com/faq#signatures)。這些東西已經從你的其他一些問題中編輯出來了,所以我想我應該讓你知道這一點。除此之外,很好的問題。 – Mischa
爲什麼不修正CSV數據以符合數據庫在導入數據時的期望?你不希望你的數據庫對你撒謊,你不想騙你的數據庫。 –
謝謝畝。你的意見總是值得讚賞的。我想過這個。但是,我的數據來自信譽良好的來源(公共機構),我不想打破他們的格式。如果我將所有日期移動一行以適應數據庫行爲,並且有人與來源交叉檢查價格記錄的日期以驗證準確性,那麼它就會關閉,引起混淆和不信任。也許我應該從DateTime將我的日期列轉換爲字符串並重試此查詢? – ac360