我有一個DB有三個字段的表格:id
,value
和timestamp
。在postgres中,我如何在一個範圍內找到記錄,然後在兩側範圍內找到單個記錄?
給定兩個日期,我知道如何在postgres中編寫查詢,使用timestamp
字段將查找範圍內的所有記錄。麻煩的是,我也想在的範圍之前找到最近的單個記錄,並且在之後的範圍內找到單個最接近的記錄。
所以,如果我有這個表:
id | value | timestamp
---+-------+---------------------
1 | 18| Jan, 1 2017, 09:00:000
2 | 16| Jan, 1 2017, 09:05:000
3 | 14| Jan, 1 2017, 09:21:150
4 | 12| Jan, 1 2017, 10:01:150
5 | 13| Jan, 1 2017, 10:07:000
6 | 09| Jan, 1 2017, 10:23:000
我想寫一個查詢,需要在時代: Jan, 1 2017, 9:10:000
直到Jan, 1 2017, 10:05:000
將返回:
id | value | timestamp
---+-------+---------------------
2 | 16| Jan, 1 2017, 09:05:000
3 | 14| Jan, 1 2017, 09:21:150
4 | 12| Jan, 1 2017, 10:01:150
5 | 13| Jan, 1 2017, 10:07:000
id 2
,是距離範圍底部最近的記錄,但仍小於範圍的底部。 id 5
是距離範圍頂部最近的記錄,但仍大於(或等於)該範圍的頂部。
胡安,你的答案太複雜了。並且它假定id-s與時間戳 –
@DanielVidić的順序相同這裏沒有什麼複雜的,但是abelisto的答案更簡單。如果id沒有順序,您可以更改時間戳的id,但是應該爲timestamp添加一個索引 –