如何编写查询以获取最大日期?该查询涉及到IT技术。

4

我在查询方面遇到了问题:

 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 返回了两条记录;那时我想要获取最大的日期,即 2011年12月08日

所以期望的结果应该是这样的:

   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

如何针对这种情况编写查询?

1
什么版本的SQL Server?为什么你把这个标记为mysqli? - OMG Ponies
3
提醒一下,希望那不是真实数据,因为2015年9月只有30天 :) - Kyro
2个回答

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
你应该把ORDER BY ProductCode放在WHERE rank_num=1之后,因为子查询中不能有ORDER BY条件。 - Kyro
嗨,这个查询不起作用。有两个“WHERE子句”。请问你能帮我吗? - Piraba
第一个 WHERE 子句是用于子查询的,而第二个 WHERE 子句是用于外部查询的。因此,语法上是有效的。你是否遇到了错误(或者)没有返回结果? - rkg

0
请使用以下查询:
select BusinessUnit, ProductCode,  DateFrom, DateTo, Price from WMPriceDetail 
where DateFrom  in (select MAX(datefrom) from WMPriceDetail group by ProductCode)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接