給定一個表,看起來像這樣:PSQL選擇每分鐘每個ID的最大值,每個ID每分鐘多個值?
sensor_id | time | voltage -----------+------------------------+------------ 12292 | 2009-12-01 00:50:04-07 | 2270 12282 | 2009-12-01 00:50:04-07 | 93774 12192 | 2009-12-01 00:50:04-07 | 9386 12609 | 2009-12-01 00:50:05-07 | 0 12566 | 2009-12-01 00:50:08-07 | 0 12659 | 2009-12-01 00:50:19-07 | 540 12660 | 2009-12-01 00:50:19-07 | 550 12661 | 2009-12-01 00:50:19-07 | 510 12656 | 2009-12-01 00:50:19-07 | 30240 12657 | 2009-12-01 00:50:19-07 | 14930 12658 | 2009-12-01 00:50:19-07 | 17420 11820 | 2009-12-01 00:50:26-07 | 1.38 11832 | 2009-12-01 00:50:28-07 | 1.359 12768 | 2009-12-01 00:50:33-07 | 636588 13192 | 2009-12-01 00:50:34-07 | 1.401 . . . . . . . . .
有些時候,你會得到記錄看起來像:
12292 | 2009-12-01 00:50:04-07 | 2270 12282 | 2009-12-01 00:50:04-07 | 93774 12192 | 2009-12-01 00:50:04-07 | 9386 12609 | 2009-12-01 00:50:05-07 | 0 12566 | 2009-12-01 00:50:08-07 | 0 12659 | 2009-12-01 00:50:19-07 | 540 * 12659 | 2009-12-01 00:50:45-07 | 541 * 12660 | 2009-12-01 00:50:19-07 | 550 12661 | 2009-12-01 00:50:19-07 | 510 12656 | 2009-12-01 00:50:19-07 | 30240 12657 | 2009-12-01 00:50:19-07 | 14930 12658 | 2009-12-01 00:50:19-07 | 17420 11820 | 2009-12-01 00:50:26-07 | 1.38 # 11832 | 2009-12-01 00:50:28-07 | 1.359 11820 | 2009-12-01 00:50:28-07 | 1.3 # 12768 | 2009-12-01 00:50:33-07 | 636588 13192 | 2009-12-01 00:50:34-07 | 1.401 . . . . . . . . .
通知的盯着和散列線。每個都是在同一分鐘內讀取的,但我只需要每分鐘一個值,最好是最大值。 我想:
select sensor_id, read_time, voltage
from table
where (sensor_id, read_time)
in (select sensor_id, max(read_time)
from table
group by sensor_id);
這顯然是不行的,但我覺得我是在正確的軌道上?
對於那些有興趣的最終代碼如下所示:
select sensor_id, date_trunc('minute', read_time), max(voltage)
from table
group by sensor_id, date_trunc('minute', read_time)
order by date_trunc('minute', read_time);
您的函數DateHourMinuteFunction()已經存在我相信 - 它被稱爲date_trunc()。 – 2009-12-14 20:40:18
OP是否指定了特定的數據庫?我錯過了... – 2009-12-14 20:54:34