我在查询中遇到了问题:
priceDeatil
ProductCode BusinessUnit price DateFrom DateTo
10001 ORB 12.00 12-08-2011 31-09-2015
10001 ORB 21.00 01.08-2011 15-11-2011
10002 ORB 31.00 01.04-2011 15-08-2012
10003 ORB 42.00 01.05-2011 15-08-2012
我的查询是:
SELECT BusinessUnit, ProductCode, DateFrom, DateTo, Price
FROM WMPriceDetail
WHERE (DateFrom < 'Sep 01 2011') AND (DateTo > 'Sep 01 2011' OR DateTo = '')
ORDER BY ProductCode
此回归
priceDeatil
ProductCode BusinessUnit price DateFrom DateTo
10001 ORB 12.00 12-08-2011 31-09-2015
10001 ORB 21.00 01.08-2011 15-11-2011
10002 ORB 31.00 01.04-2011 15-08-2012
10003 ORB 42.00 01.05-2011 15-08-2012
但是这里productCode 10001
会返回两条记录;那时我想得到最大日期,即12-08-2011
。
所以期望的结果应该是这样的:
priceDeatil
ProductCode BusinessUnit price DateFrom DateTo
10001 ORB 12.00 12-08-2011 31-09-2015
10002 ORB 31.00 01.04-2011 15-08-2012
10003 ORB 42.00 01.05-2011 15-08-2012
请帮帮我...如何为这种情况编写查询?
提前致谢
答案 0 :(得分:3)
SELECT BusinessUnit, ProductCode, DateFrom, DateTo, Price FROM
(SELECT BusinessUnit, ProductCode, DateFrom, DateTo, Price,
rank() over (PARTITION BY ProductCode ORDER BY DateFrom DESC) rank_num
FROM WMPriceDetail
WHERE (DateFrom < 'Sep 01 2011') AND (DateTo > 'Sep 01 2011' OR DateTo = '') t
WHERE rank_num=1
ORDER BY ProductCode
答案 1 :(得分:0)
使用此查询:
select BusinessUnit, ProductCode, DateFrom, DateTo, Price from WMPriceDetail
where DateFrom in (select MAX(datefrom) from WMPriceDetail group by ProductCode)