从第二高行获取值,加入 SQL
Posted
技术标签:
【中文标题】从第二高行获取值,加入 SQL【英文标题】:Get value from second highest row, join SQL 【发布时间】:2015-11-09 00:00:20 【问题描述】:我有两张桌子
排名
列: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
需要在排名表中更新。
我尝试过加入表格,但我只需要排名历史表中的一行,但在加入期间我无法限制。
【问题讨论】:
我不明白你的问题,更具体地说,change
是什么。考虑添加说明您的输入和所需输出的示例数据。
你的主键应该使用item_name
,而不是rank
。
@GordonLinoff 为什么是 item_name? (rank, category_id, country_id) 也是唯一的,每个rank只有一项。
在此处考虑表架构调整。为什么要在不同的相关表中记录两次 ids、item_name 和 rank?对不同的项目和多个等级(一对多)进行规范化,并避免重复列。
@rajat 。 . . ranking
是随时间变化的计算。 item_name
作为表的主键似乎更为基础。
【参考方案1】:
一种方法是使用日期函数。像这样的:
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');
【讨论】:
以上是关于从第二高行获取值,加入 SQL的主要内容,如果未能解决你的问题,请参考以下文章
如何使用localstorage / ajax jquery从第一页到第二页获取单选按钮值
我想写两个plsql程序。在一个过程中获取数据并从第二个过程中打印出来