查找订单的最长日期

时间:2016-03-11 19:51:25

标签: sql sql-server greatest-n-per-group

以下问题专家是我的代码: 我有不同的表格,我有数据。一种材料MYCODE是不同原料的化合物,如01-,04-和05-。对于他们每个人,我应该找出最后一个日期(最大购买日期),即max(tp_date)。 下面是我的代码:但输出显示第一个材料01-的2个不同日期。我只需要最后一个,所以订单日期为2015-04-22 请帮忙:

select dmprod.pr_codenum pr_co, dmprod.pr_descrip desc, 
max(dttpur.tp_date) Date, dmfcur.fc_name CURR,
(select pr_codenum from 
dmprod where dmprod.pr_id=dmbom.bo_bomfor)BOM, 
max(dmrev.re_name) Rev, 
sum(dmbom.bo_quant)*dtpur.pu_price Ext, 
dmunit.un_name mea, 
dtpur.pu_price price from dmbom, dmprod, 
dmrev, dmunit, dttpur, dmfcur, dtpur  
where dmbom.bo_prid=dmprod.pr_id 
and dttpur.tp_fcid=dmfcur.fc_id
and dmprod.pr_id=dtpur.pu_prid and dttpur.tp_id=dtpur.pu_tpid
and dmbom.bo_unid=dmunit.un_id 
and dmrev.re_id=dmbom.bo_reid 
and pr_active=1 and (select pr_codenum from dmprod where dmprod.pr_id=dmbom.bo_bomfor)='MYCODE' 
group by pr_codenum, pr_descrip, fc_name,un_name,
pu_price, bo_bomfor

,输出为:

pr_co   des  Date       CURR    BOM    Rev  Ext      mea    price
01-       T  2015-04-22  USD    MYCODE  01   127     mg      2
01-       T  2015-02-26  USD    MYCODE  01   290     mg      4
04-       M  2016-01-12  EUR    MYCODE  01   300     mg      7
05-       S  2016-02-25  EUR    MYCODE  01   260     mg      4

1 个答案:

答案 0 :(得分:0)

请注意最后一列中的不同价格。您在GROUP BY子句中包含pu_price,因此它为每个不同的价格返回不同的行。如果您想在同一行上对所有01-材料进行分组,而不考虑价格,那么只需将pu_price从GROUP BY子句中删除。