选择最新的每项
问题描述:
组
我有2个表产品和成本
产品
ProdCode - PK
ProdName
成本
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;
嗯呀它显示了正确的EFFECTIVEDATE但对具体EFFECTIVEDATE犯规匹配的成本。
所以我想选择与每个项目相匹配的成本的最新日期。
例如我选择的日期是“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
,因为它比上的日期我较轻查询,它是该项目的最新版本。然后我想在我的查询上显示每种产品的最新成本。
希望能尽快收到您的来信!谢谢!
答
这里需要使用子查询:
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
给所有产品及其各自的最大EffectiveDates的列表。加入会将每个数据录入的零售成本“粘”到结果上。
答
或者,使用旧的最大连接技巧应该做的伎俩。
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
thanks!我已经在我的查询中使用它了! – QWERTY 2010-02-05 23:25:34