Sql 我需要将前x个最近(由SALEDT)行分组为邻域(NBHD)

Sql 我需要将前x个最近(由SALEDT)行分组为邻域(NBHD),sql,ms-access,Sql,Ms Access,我使用的是microsoft access,我需要一个sql查询来返回每个社区的前x个(在我的例子中是40个)最近销售额(NBHD)。我的数据如下所示: PARID PRICE SALEDT SALEVAL NBHD 04021000 140000 1/29/2016 11 700 04021000 160000 2/16/2016 11 700 04018470 250000 4/23/2015

我使用的是microsoft access,我需要一个sql查询来返回每个社区的前x个(在我的例子中是40个)最近销售额(
NBHD
)。我的数据如下所示:

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
我需要的是每个
NBHD
的前40名最新
SALEDT
条目,如果相同的
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行(因为它的SALEDT比第1行晚),第4行(因为它比第3行、第5行和第6行的
价格更高。希望这是清楚的。此外,我正在使用MS access SQL来实现这一点,但如果更简单的话,我不会反对某些VBA解决方案。提前感谢。

在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
                   );
您的附加约束相当混乱。我不确定是否完全遵循了它们,因为我不知道这些列真正指的是什么。

给您:

 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

PARID是指特定地块的ID号。SALEDT是地块出售的日期,PRICE是出售的价格,SALEVAL是出售类型的分类,与查询无关。NBHD是地块所在的街区。我需要每个街区的前40名最新销售额,没有重复项如果出现重复的parid,我想要两个中最新的一个。如果重复的parid具有相同的销售日期,我想要两个中最贵的一个。