我使用微软访问权限,我需要一个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解决方案。提前感谢。
答案 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