很抱歉,如果已经回答了这个问题,但我发现很难在没有示例的情况下说出问题。我有一组ID,我每天每小时都会保存信息(如果有的话)。我正在尝试进行每日研究,其中特定时间比其他时间更相关,因此我想获取每个ID的每日数据并按指定的时间列表过滤,如果第一次没有数据,列表,检查列表中的下一次是否有数据,直到在其中一个时间找到数据,或者在任何指定时间内没有数据可用。例如
ID | Data_Date | Data_Time | Some_data
1 1/4/2015 10:00:00 Z
1 1/4/2015 12:00:00 Z
1 1/5/2015 12:00:00 A
1 1/5/2015 13:00:00 B
2 1/5/2015 13:00:00 C
2 1/5/2015 11:00:00 D
我想从12:00:00(如果可用)获取数据,否则使用11:00:00,如果两者都不存在则使用13:00:00。 10:00:00将不在我关心的时间列表中,因此被忽略。查询应该返回
ID | Data_Date | Data_Time | Some_data
1 1/4/2015 12:00:00 Z
1 1/5/2015 12:00:00 A
2 1/5/2015 11:00:00 D
并非总是最早的时间。如果不清楚,我会尽力详细说明。任何帮助都是值得赞赏的
答案 0 :(得分:0)
我真的不知道这对你有没有帮助,因为你可能已经尝试过了,但这是一个可以帮助你的起点我跳跃我们可以讨论想法并一起解决这个问题(两个头比一个好:)
with raw as (select '12:00:00'::time as starting_hour)
select id, data_date, data_time, some_data
from test, raw
where data_time =
case when data_time = starting_hour
then data_time
else
case when data_time = starting_hour + '-1h'
then data_time
else
case when data_time = starting_hour + '1h'
then data_time
else null
end
end
end;
这将给你12:00,11:00和13:00。我们只需要在找到与其中一个小时匹配的行时停止搜索。我会继续尝试:)