我有2个表产品和成本
产品
ProdCode - PK
ProdName
COST
Effectivedate - PK
RetailCOst
Prodcode
我尝试了这个查询:
SELECT a.ProdCOde AS id, MAX(EffectiveDate) AS edate, RetailCOst AS retail
FROM cost a
INNER JOIN product b USING (ProdCode)
WHERE EffectiveDate <= '2009-10-01'
GROUP BY a.ProdCode;
是的,它显示了正确的有效日期,但该特定有效日期的成本并不匹配。
所以我想选择每件商品的匹配成本的最新日期。
例如我选择的日期是'2009-12-25',1项的记录是:
ProdCode |EffectiveDate| Cost
00010000 | 2009-01-05 | 50
00010000 | 2009-05-25 | 48
00010000 | 2010-07-01 | 40
所以在结果中我应该得到00010000|2009-05-25|48
,因为它小于我查询的日期,它是该项目的最新日期。然后我想在我的查询中显示每种产品的最新成本。
答案 0 :(得分:2)
您需要在此处使用子查询:
SELECT maxdates.ProdCode, maxdates.maxDate, cost.RetailCost as retail
SELECT ProdCode, max(EffectiveDate) as maxDate
FROM cost
WHERE EffectiveDate < '2009-10-01'
GROUP BY ProdCode
) maxdates
LEFT JOIN cost ON (maxdates.ProdCode=cost.ProdCode
AND maxdates.maxDate=cost.EffectiveDate)
<强>说明:强>
内部SELECT
列出了所有产品及其各自的最大有效日期。联接将每个数据输入的零售成本“粘合”到结果中。
答案 1 :(得分:2)
或者,使用旧的最大连接技巧应该可以解决问题。
SELECT
p.ProdCode,
SUBSTRING(MAX(CONCAT(d.EffectiveDate, c.RetailCost)), 1, 10) AS date,
SUBSTRING(MAX(CONCAT(d.EffectiveDate, c.RetailCost)), 10, 100) + 0 AS cost
FROM
product p,
cost c
WHERE
p.ProdCode = c.ProdCode AND
c.EffectiveDate < '2009-10-01'
GROUP BY
p.ProdCode