在 MSSQL 查询上分组然后最大
Grouping then max on MSSQL Query
我有两个表如下。
Table 1:
ID
ArtNumber
Date
Price
1
Article1
07.05.2022
100.00
2
Article2
07.05.2022
100.00
3
Article1
10.05.2022
100.00
4
Article2
10.05.2022
100.00
Table 2
ID
ArtNumber
Price
1
Article1
80.00
2
Article2
120.00
我想要 Table 1 每个 ArtNumber 的最新(日期)价格。但也想检查价格是否超过 Table 2. (Table1.Price
预期结果:
ArtNumber
Price
Article2
120.00
我尝试了很多 GROUP BY
、ORDER BY
、MAX()
和 DISTINCT
组合,但都没有成功。
您可以使用简单的 greatest-n-per-group 查询:
with cte as (
select *, row_number() over (partition by artnumber order by date desc) as rn
from table1
)
select *
from cte
join table2 on cte.artnumber = table2.artnumber
where rn = 1 and cte.price < table2.price
我有两个表如下。
Table 1:
ID | ArtNumber | Date | Price |
---|---|---|---|
1 | Article1 | 07.05.2022 | 100.00 |
2 | Article2 | 07.05.2022 | 100.00 |
3 | Article1 | 10.05.2022 | 100.00 |
4 | Article2 | 10.05.2022 | 100.00 |
Table 2
ID | ArtNumber | Price |
---|---|---|
1 | Article1 | 80.00 |
2 | Article2 | 120.00 |
我想要 Table 1 每个 ArtNumber 的最新(日期)价格。但也想检查价格是否超过 Table 2. (Table1.Price 预期结果: 我尝试了很多
ArtNumber
Price
Article2
120.00
GROUP BY
、ORDER BY
、MAX()
和 DISTINCT
组合,但都没有成功。
您可以使用简单的 greatest-n-per-group 查询:
with cte as (
select *, row_number() over (partition by artnumber order by date desc) as rn
from table1
)
select *
from cte
join table2 on cte.artnumber = table2.artnumber
where rn = 1 and cte.price < table2.price