从联接表中选择每组的最新数据

Posted

技术标签:

【中文标题】从联接表中选择每组的最新数据【英文标题】:Select latest data per group from joined tables 【发布时间】:2015-06-30 10:34:53 【问题描述】:

我有两张这样的表:

survey:
survey_id | store_code | timestamp

product_stock:
survey_id | product_code | production_month | value

如何根据调查时间戳并按 store_code、product_code 和 production_month 分组获得最新值?

例如,如果我有

survey_id | store_code | timestamp
1           store_1      2015-04-20
2           store_1      2015-04-22
3           store_2      2015-04-21
4           store_2      2015-04-22

survey_id | product_code | production_month | value
1           product_1      2                  15
2           product_1      2                  10
1           product_1      3                  20
1           product_2      2                  12
3           product_2      2                  23
4           product_2      2                  17

它会返回这样的结果

survey_id | store_code | time_stamp | product_code | production_month | value
2           store_1      2015-04-22   product_1      2                  10
1           store_1      2015-04-20   product_1      3                  20
1           store_1      2015-04-20   product_2      2                  12
4           store_2      2015-04-22   product_2      2                  17

而且它需要尽可能快,因为数据库的大小相当大

【问题讨论】:

“根据调查时间戳获取最新值”是什么意思?我不明白你的这部分问题。 抱歉英语不好,不是母语人士...我的意思是根据调查的时间戳列选择最新的行。 所以你只想选择最新的一行?一行结果? 是的,按 store_code、product_code 和生产月份分组 嗯,最新的基于时间戳列上的日期 【参考方案1】:

已更新 - 请再次运行查询

这是我的答案:

SELECT survey.survey_id, survey.store_code, survey.timestamp, product_stock.survey_id, product_stock.product_code, product_stock.production_month, product_stock.value 
FROM survey 
INNER JOIN product_stock
ON survey.survey_id = product_stock.survey_id
WHERE survey.timestamp = (SELECT MAX(timestamp) 
               FROM survey)
GROUP BY survey.store_code,product_stock.product_code,product_stock.production_month;

【讨论】:

如果我包含 where 子句,它似乎返回 0 行,如果我把它取出它返回每个组的第一次出现 已更新 - 请再次运行查询。

以上是关于从联接表中选择每组的最新数据的主要内容,如果未能解决你的问题,请参考以下文章

根据最大日期获取每组的最新行

从每组中的 3 个表中选择 sql 中具有最新日期的行

Google BigQuery:仅从最新表中选择

如何根据特定的顺序选择每组的第一行?

Pandas:选择每组的前几行

选择每组的最大行数 - 熊猫性能问题