You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo按城市分组获取昨日及今日数据最大值的技术问询

嘿,我刚看完你的问题——你要按城市分组取昨日(对应每个城市的前2条数据)和今日(该城市剩余数据)的数值最大值,但之前写的代码返回的所有城市最大值都一样对吧?这大概率是分组排序的逻辑没处理对,我来给你一步步解决:

先明确核心需求

数据库中存在多城市多日期的数据,需按城市分组,分别获取每个城市**昨日(该城市的前2条数据)和今日(该城市剩余数据)**的数值最大值。

解决方案代码

步骤1:给每个城市的数据按日期排序编号

首先得确保每个城市的数据是按日期顺序排列的,这样前2条才对应昨日数据。我们用窗口函数ROW_NUMBER()给每个城市的数据单独编号:

WITH ranked_city_data AS (
    SELECT 
        city,
        value,
        -- 按城市分组,再按日期升序给数据编号(日期早的在前)
        ROW_NUMBER() OVER (PARTITION BY city ORDER BY date_column ASC) AS row_num
    FROM your_table_name
)

这里的关键是PARTITION BY city——它会让每个城市的数据单独排序,而不是全局混排(这就是你之前所有城市最大值相同的核心原因!)。

步骤2:按城市分组计算最大值

接着根据编号区分昨日(row_num ≤2)和今日(row_num >2),再用聚合函数取各自的最大值:

SELECT 
    city,
    -- 取昨日(前2条)的最大值
    MAX(CASE WHEN row_num <= 2 THEN value END) AS yesterday_max,
    -- 取今日(剩余)的最大值
    MAX(CASE WHEN row_num > 2 THEN value END) AS today_max
FROM ranked_city_data
GROUP BY city
ORDER BY city;

针对你的示例数据测试

用你给出的示例数据跑上面的代码,会得到这样的结果:

cityyesterday_maxtoday_max
A6298
B8555
C7496

常见错误排查

如果之前的代码所有城市最大值相同,90%是因为没加PARTITION BY city——这会导致整个表的数据全局排序,而不是每个城市单独排序,最终分组计算时就会把所有城市的最值混在一起。

内容的提问来源于stack exchange,提问作者user_123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:25:12