我需要将最近的x(最近的SALEDT)行分组为邻域(NBHD)

时间:2018-03-22 14:46:02

标签: sql ms-access

我使用微软访问权限,我需要一个SQL查询来返回每个社区(NBHD)的最新销售额(我的情况下为40)。我的数据看起来像这样:

PARID      PRICE     SALEDT      SALEVAL  NBHD
 04021000   140000    1/29/2016   11       700
 04021000   160000    2/16/2016   11       700
 04018470   250000    4/23/2015   08       701
 04018470   300000    4/23/2015   08       701
 04016180   40000     5/9/2017    11       705
 04023430   600000    6/12/2017   19       700

我需要的是每个SALEDT的前40个最新NBHD条目,如果相同的PARID会出现在前40个两次或更多,我只想要最近的一个。如果行具有相同的PARID和相同的SALEDT,我需要唯一最昂贵的行。对于这一小组样本数据,我会得到:

 PARID      PRICE     SALEDT      SALEVAL  NBHD
 04021000   160000    2/16/2016   11       700
 04023430   600000    6/12/2017   19       700
 04018470   300000    4/23/2015   08       701
 04016180   40000     5/9/2017    11       705

我得到第2行(因为它比第1行更晚SALEDT),第4行(因为它比第3行有更高的PRICE,第5行和第6行。希望是此外,我使用MS访问SQL来执行此操作,但如果更容易,则不会反对某些VBA解决方案。提前感谢。

2 个答案:

答案 0 :(得分:0)

在MS Access中,您可以执行以下操作以获取每个社区的40个最新条目:

select t.*
from t
where t.salesdt in (select top 40 t2.salesdt
                    from t as t2
                    where t2.nbhd = t.nbhd
                    order by t2.salesdt desc
                   );

您的其他限制令人困惑。我不确定我是否完全遵循它们,因为我不知道列真正引用了什么。

答案 1 :(得分:0)

你走了:

 select a.parid, max(a.price)price, a.saledt, a.saleval, a.nbhd from #table a join (
 select parid,  max(saledt) saledt from  #table
 group by  parid ) b on a.parid=b.parid and a.saledt=b.saledt  
 group by a.parid,  a.saledt, a.saleval, a.nbhd
 order by a.nbhd