从第二高的行获取值,加入SQL

时间:2015-11-09 00:00:21

标签: sql postgresql

我有两张桌子

排序

列:category_id,country_id,item_name,rank,created_at,updated_at,change

Pk :( category_id,country_id,rank)

Ranking_History

id,category_id,country_id,item_name,rank,created_at,updated_at

Pk:id

排名表包含当前排名,排名历史表包含过去的所有排名。排名每天更新,我无法找出sql查询,以找到自上次排名以来的排名变化。 change需要在排名表中更新。

我已尝试加入表格,但我只需要排名历史记录表中的一行,但在加入期间我无法限制。

1 个答案:

答案 0 :(得分:0)

一种方法是使用日期函数。像这样:

update ranking r
    set change = (r.rank = rh.rank)
    from ranking_history rh
    where r.category_id = rh.cateogry_id and
          r.country_id = rh.country_id and
          r.item_name = rh.item_name and
          date_trunc('day', r.created_at) = date_trunc('day', rh.created_at + interval '1 day');