在保留所有记录的同时标记组内的最大值和最小值

时间:2015-10-26 18:40:50

标签: postgresql

preferable_output_of_dataset 我有一个由许多行组成的大型数据集,但最相关的两个是time和time_id。 (详见附件)。 Time_id可以被视为给定组的名称,time是每行的排名。 - 这些字段已在数据集中设置,无法更改。我想创建一个新字段,标记最大和最小时间'每组但同时保持所有记录。我希望我的输出看起来与附件相同。我已经能够轻松地提取最大值和最小值,但是当我尝试将所有记录保存在组中时,我遇到了问题。感谢您的帮助。

select 
   time 
  ,time_id 
from my_table

1 个答案:

答案 0 :(得分:1)

使用window functions

可以轻松完成此操作
from collections import defaultdict


final_list = []
lookup_map = defaultdict(lambda : -1)
for comet in sighting_list:
    final_index = lookup_map[comet["name"]] 
    if final_index < 0:
        lookup_map[comet["name"]] = len(final_list)
        final_list.append(comet)
    else:
        final_list[final_index]["coordinates"].extend(comet["coordinates"])

无关,但是:select "time", time_id, case when "time" = max(time) over (partition by time_id) then 'min' when "time" = min(time) over (partition by time_id) then 'max' else 'other' end from my_table; 是列的可怕名称。不仅因为它是一个保留字,而且因为它没有记录列的含义。它是“开始时间”,“结束时间”,“持续时间”,“偏移”......?