Sql 我需要将前x个最近(由SALEDT)行分组为邻域(NBHD)
我使用的是microsoft access,我需要一个sql查询来返回每个社区的前x个(在我的例子中是40个)最近销售额(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
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具有相同的销售日期,我想要两个中最贵的一个。