MySQL脚本触发错误1241
我有下面的脚本,它应该为已经提供的ID数组获取一个价格 但它需要每个ID获得1个价格,而棘手的是,我希望能够有预定的价格更新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
这意味着它需要采取的价格,我想你的问题在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);