我想做一个分组,通过这个分组,我将把多边的表连接到一边的表,所以我需要做一个组,以获得正确的结果。我遇到的问题是,当我使用一列进行分组时,我仍然在多边表中得到重复,所以我必须使用另一个字段进行另一个分组,但不确定我是否得到了正确的结果,有人能看到我是否以正确的方式进行吗
select max(id),
sale_id,
max(date)
from sales
group by sale_id
因此,我希望首先计算最大日期,然后计算最大id。我不希望同时计算它们,因为这可能会导致数据无法按预期显示
所以我举一个的例子
我有三列
id date sale_id
1 01-01-2022 5675
2 02-01-2022 5675
3 05-01-2022 5675
4 02-01-2022 5676
5 03-01-2022 5676
6 03-01-2022 5676
因此我们可以看到sale_id 5676在2022年1月3日有两次销售。所以我想先按日期分组,然后返回以下
id date sale_id
3 05-01-2022 5675
5 03-01-2022 5676
6 03-01-2022 5676
一旦我得到这个结果集,我想按id分组,以得到我想要的结果集
id date sale_id
3 05-01-2022 5675
6 03-01-2022 5676
您可以将聚合max
函数与last
函数一起使用,通过一个聚合(分组依据(获得两个值:
select max(id) keep (dense_rank last order by sale_date, id) as id,
max(sale_date) as sale_date,
sale_id
from your_table
group by sale_id;
SALE_DATE您可以始终对行进行分区:
SELECT id, [date], sale_id
FROM
(
SELECT MAX(Id) AS Id, [date], sale_id, ROW_NUMBER() OVER(PARTITION BY sale_id ORDER BY [date] DESC) AS RowNum
FROM Sales
GROUP BY [Date], sale_id
)x
WHERE RowNum = 1
我将您的表称为"你的表date_id是您称之为"date"的列的名称,列名不应与date、varchar、number和…等格式名称相同。
好的,就这样做吧:
with b as (select distinct sale_id,max(date_id) over (partition by sale_id) date_id from your_table)
select max(a.id),
a.date_id,
a.sale_id
from your_table a join b
on a.sale_id=b.sale_id and
a.date_id=b.date_id
group by a.date_id,a.sale_id ;
date_id是日期格式。我用了"over partition by…"。
从字面上看,PARTITION BY子句设置将用于每个";GROUP";OVER条款中。
尝试"过度分区"族。它是有效的。