MySQL脚本触发错误1241

MySQL脚本触发错误1241,mysql,sql,Mysql,Sql,我有下面的脚本,它应该为已经提供的ID数组获取一个价格 但它需要每个ID获得1个价格,而棘手的是,我希望能够有预定的价格更新 这意味着它需要采取的价格,我想你的问题在IN条款上 在in子句中选择两个字段 编辑 您需要根据wo_id和Max timestamp_valid自动加入子查询 我想你想要这样的东西: SELECT pp.*, ppf.formula_id, ppf.formula as price2_formula FROM product_pricing pp LEFT JOIN

我有下面的脚本,它应该为已经提供的ID数组获取一个价格

但它需要每个ID获得1个价格,而棘手的是,我希望能够有预定的价格更新


这意味着它需要采取的价格,我想你的问题在IN条款上

在in子句中选择两个字段

编辑

您需要根据wo_id和Max timestamp_valid自动加入子查询


我想你想要这样的东西:

SELECT pp.*, ppf.formula_id, ppf.formula as price2_formula
FROM product_pricing pp LEFT JOIN
     product_price_formulas ppf
     ON pp.formula_id = ppf.formula_id    
WHERE (pp.wo_id, pp.timestamp_valid) IN
          (SELECT pp2.wo_id, MAX(pp2.timestamp_valid)
           FROM product_pricing pp2
           WHERE pp2.wo_id IN ('015724', '028791', '015712', '015715', '015717', '039750', '028791') AND
                pp2.timestamp_valid <= UTC_TIMESTAMP
          );

您可以将product_pricing和最新有效的_时间戳记录的派生结果集结合起来

如果我们暂时忽略产品定价公式表,因为您没有将其包含在样本数据和结果中

SELECT 
p.`wo_id`,
p.`price` AS price2,
p.`timestamp_valid`
FROM `product_pricing` p
JOIN (SELECT wo_id, MAX(timestamp_valid) AS max_valid_ts
      FROM `product_pricing`
      WHERE `timestamp_valid` <= UTC_TIMESTAMP
      GROUP BY wo_id) d
ON (d.wo_id = p.wo_id AND d.max_valid_ts = p.timestamp_valid)
WHERE p.`wo_id` IN (015724, 028791);

试一试

嗯,是的,它是这样工作的,但是…它返回每个ID的多个价格。它只需要返回1,这是产品定价。时间戳有效。您可以提供一些示例数据和您的预期结果,这将是有帮助的:添加。请看一下这本书question@Borsn抱歉,回复晚了,编辑愿望可以帮助您:它返回每个id的所有值。而不是像在想要的输出中那样通过时间戳过滤掉它。MAX在这种情况下做了什么?您似乎只是在选择公式。如何添加原始SELECT中的所有其他行?@Borsn。您可以在“选择”菜单中列出它们。我把它短路到了。
——————————————————————————————————————————————————————————————————
 | wo_id    | price2    | timestamp_valid 
——————————————————————————————————————————————————————————————————
 | 028791   | 6000      | 2018-04-01 19:55:41
 | 015724   | 1500      | 2018-03-01 19:55:41
SELECT 
    `product_pricing`.`wo_id`,
    `product_pricing`.`currency` AS price2_currency,
    `product_pricing`.`price` AS price2,
    `product_pricing`.`formula_id`,
    `product_pricing`.`vat_calculated` AS price2_vat_calculated,
    `product_pricing`.`vat_id`,
    `product_pricing`.`timestamp_valid`,
    `product_price_formulas`.`formula_id`,
    `product_price_formulas`.`formula` price2_formula
FROM 
`product_pricing`
LEFT JOIN `product_price_formulas` ON `product_pricing`.`formula_id` = `product_price_formulas`.`formula_id`
INNER JOIN 
(
    SELECT 
        `product_pricing`.`wo_id`,
        MAX(`timestamp_valid`) AS MaxDate
    FROM `product_pricing`
    WHERE 
        `product_pricing`.`timestamp_valid` <= UTC_TIMESTAMP
    GROUP BY 
        `product_pricing`.`wo_id`
)as temp ON temp.wo_id = `product_pricing`.`wo_id` AND temp.MaxDate = `product_pricing`.`timestamp_valid`
WHERE  
    `product_pricing`.`wo_id` IN ('015724', '028791', '015712', '015715', '015717', '039750', '028791')
SELECT pp.*, ppf.formula_id, ppf.formula as price2_formula
FROM product_pricing pp LEFT JOIN
     product_price_formulas ppf
     ON pp.formula_id = ppf.formula_id    
WHERE (pp.wo_id, pp.timestamp_valid) IN
          (SELECT pp2.wo_id, MAX(pp2.timestamp_valid)
           FROM product_pricing pp2
           WHERE pp2.wo_id IN ('015724', '028791', '015712', '015715', '015717', '039750', '028791') AND
                pp2.timestamp_valid <= UTC_TIMESTAMP
          );
WHERE pp.timestamp_valid = (SELECT MAX(pp2.timestamp_valid)
                            FROM product_pricing pp2
                            WHERE pp2.wo_id = pp.wo_id AND
                                  pp2.timestamp_valid <= UTC_TIMESTAMP
                           ) AND
      pp2.wo_id IN ('015724', '028791', '015712', '015715', '015717', '039750', '028791');
SELECT 
p.`wo_id`,
p.`price` AS price2,
p.`timestamp_valid`
FROM `product_pricing` p
JOIN (SELECT wo_id, MAX(timestamp_valid) AS max_valid_ts
      FROM `product_pricing`
      WHERE `timestamp_valid` <= UTC_TIMESTAMP
      GROUP BY wo_id) d
ON (d.wo_id = p.wo_id AND d.max_valid_ts = p.timestamp_valid)
WHERE p.`wo_id` IN (015724, 028791);