从第二高行获取值,加入 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程序。在一个过程中获取数据并从第二个过程中打印出来

SQL-获取行值作为列标题

使用 sql 语句从第二个 datagridview 填充 DataGridView

SQL group by:选择另一列有其最小值/最大值的值

Pyspark:加入 2 个数据帧以仅从第 2 个数据帧获取新记录(历史化)