选择查询以选择最接近日期,该日期小于或等于postgresql中的当前日期

时间:2016-12-22 06:53:02

标签: sql postgresql

这是我的表,名称是resource_calendar。

enter image description here

我想选择 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      

2 个答案:

答案 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() {
  }