SQl查询问题 -

时间:2011-09-01 04:32:21

标签: sql sql-server mysqli

我在查询中遇到了问题:

 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

请帮帮我...如何为这种情况编写查询?

提前致谢

2 个答案:

答案 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)