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

MySQL脚本触发Error #1241问题排查及定时价格查询需求咨询

实现按ID数组获取有效价格的MySQL脚本

针对你需要按给定ID数组获取对应价格、每个ID仅返回一条记录,同时支持定时价格更新(仅选取时间戳≤当前UTC时间的价格)的需求,我完善并格式化了MySQL脚本如下:

完整SQL脚本

SELECT 
    `wo_id`,
    `price2_currency`,
    `price2`,
    `formula_id`
FROM (
    SELECT 
        `product_pricing`.`wo_id`,
        `product_pricing`.`currency` AS price2_currency,
        `product_pricing`.`price` AS price2,
        `product_pricing`.`formula_id`,
        `product_pricing`.`timestamp`, -- 假设表中存在记录价格生效时间的字段
        -- 按产品ID分组,给符合时间条件的记录按时间倒序排名
        ROW_NUMBER() OVER (
            PARTITION BY `product_pricing`.`wo_id` 
            ORDER BY `product_pricing`.`timestamp` DESC
        ) AS row_num
    FROM `product_pricing`
    -- 筛选已生效的价格(时间戳≤当前UTC时间)
    WHERE `product_pricing`.`timestamp` <= UTC_TIMESTAMP()
    -- 指定要查询的目标ID数组,可替换为实际业务中的ID集合
    AND `product_pricing`.`wo_id` IN ('WO001', 'WO002', 'WO003')
) AS ranked_prices
-- 仅保留每个ID的第一条记录(最新的有效价格)
WHERE row_num = 1;

关键逻辑说明

  • 定时生效控制:通过WHERE timestamp <= UTC_TIMESTAMP()确保只返回当前时间及之前已生效的价格,完美支持提前录入未来时间的价格,到点自动生效的定时更新需求。
  • 单ID唯一记录:使用ROW_NUMBER()窗口函数按wo_id分组,按时间戳倒序排序,这样每个ID组内最新的有效价格会被标记为row_num=1,最终只取这一条记录。
  • 动态ID数组:脚本中的IN ('WO001', 'WO002', 'WO003')可以替换为实际需要查询的ID集合,也可以结合应用层的参数化查询动态传入ID列表,适配不同业务场景。

如果你的需求是获取每个ID最早生效的有效价格,只需将窗口函数中的ORDER BY timestamp DESC改为ORDER BY timestamp ASC即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:29:03