2016-07-28 79 views
0

我正在做一些匹配來自不同表格的時間序列數據的工作。 由於此表有1秒的時間序列和類似「最接近的小時」列列的例子:Postgresql WHERE timea = timeb,如何指定精度?

"datetime"     "closesthourdatetime" 
"01/01/2005 00:30:00"  "01/01/2005 01:00:00" 
"01/01/2005 00:30:01"  "01/01/2005 01:00:00" 
"01/01/2005 00:30:02"  "01/01/2005 01:00:00" 

如果我運行

SELECT time_series_only.closesthourdatetime 
    FROM measdata.time_series_only 
    WHERE time_series_only.datetime = time_series_only.closesthourdatetime 

我沒有得到所有的結果我想希望,不像跑步

SELECT DISTINCT time_series_only.closesthourdatetime 
    FROM measdata.time_series_only 

我在哪裏。

我猜這是因爲pgsql日期時間實際上是數字值與時間作爲一天的一部分,所以毫秒可能不完全匹配我不關心。

有沒有一種方法來查詢這一點,但指定精確到秒或分鐘 WHERE time_series_only.datetime = time_series_only.closesthourdatetime 沒有這樣一個令人費解的大概慢查詢? :

SELECT DISTINCT time_series_only.closesthourdatetime 
    FROM measdata.time_series_only 
    --WHERE 
    --time_series_only.datetime = time_series_only.closesthourdatetime 
    /*EXTRACT (YEAR FROM time_series_only.datetime) = EXTRACT(YEAR FROM time_series_only.closesthourdatetime) 
    AND EXTRACT (MONTH FROM time_series_only.datetime) = EXTRACT(MONTH FROM time_series_only.closesthourdatetime) 
    AND EXTRACT (DAY FROM time_series_only.datetime) = EXTRACT(DAY FROM time_series_only.closesthourdatetime) 
    AND EXTRACT (HOUR FROM time_series_only.datetime)  = EXTRACT(HOUR FROM time_series_only.closesthourdatetime) 
    AND EXTRACT (MINUTE FROM time_series_only.datetime) = EXTRACT(MINUTE FROM time_series_only.closesthourdatetime) 
    AND EXTRACT (SECOND FROM time_series_only.datetime) = EXTRACT(SECOND FROM time_series_only.closesthourdatetime) 
+1

'date_trunc()'可以做你想做的。 –

+0

'01/01/2005 00:29:59'最接近的時間是什麼?它是向下還是向下? –

+0

01/01/2005 00:29:59將向下舍入 – SolarBrian

回答

2

可以獲得期望這個結果where子句:

WHERE datetime >= closesthourdatetime - INTERVAL '30 MINUTE' 
AND datetime < closesthourdatetime + INTERVAL '30 MINUTE' 

這裏closesthourdatetime 01/01/2005 01:00:00將匹配所有日期時間範圍[01/01/2005 00:30:00, 01/01/2005 01:30:00),其中第二個日期是排斥的。

SQL Fiddle for test/edge cases

相關問題