这是我的表,名称是resource_calendar。
我想选择 resource_id ,其生效日期小于或等于当前日期,最接近当前日期。
postgresql中的正确查询是什么?
查询
select effective date 22 for resource_id=3 and effective date 21 for resource_id=7
所以结果应该是
id resource_id calendar_id applied_on effective_date version
19 3 6 2016-12-22 11:13:26.53 2016-12-22 0
26 7 5 2016-12-22 11:16:26.53 2016-12-21 0
答案 0 :(得分:2)
SELECT t.*
FROM
(
SELECT id, resource_id, calendar_id, applied_on, effective_date, version,
MIN(ABS(EXTRACT(EPOCH FROM (current_timestamp - effective_date))))
OVER (PARTITION BY resource_id) AS diff
FROM resource_calendar
WHERE EXTRACT(EPOCH FROM (current_timestamp - effective_date)) > 0
) t
WHERE ABS(EXTRACT(EPOCH FROM (current_timestamp - t.effective_date))) = t.diff
此查询在resource_id
上按resource_calendar
形成分区。您可以将此分区视为具有相同resource_id
的逻辑分组记录。对于每个这样的记录组,它计算effective_date
和当前时间戳之间的最小差异,其中effective_date
早于当前时间戳。
外部查询然后标识具有此最小时间戳差异的记录。
如果您觉得需要更多信息,Postgres有一些reasonably helpful documentation使用窗口函数。
答案 1 :(得分:2)
你可以用它。一个简单的查询
@RunWith(PowerMockRunner.class)
@PrepareForTest( {RawDataAmFmFrequency.class} )
public class TestRawDataAmFmFrequency {
@Test
public void TestEx() {
}