在两块场地上做一组



我想做一个分组,通过这个分组,我将把多边的表连接到一边的表,所以我需要做一个组,以获得正确的结果。我遇到的问题是,当我使用一列进行分组时,我仍然在多边表中得到重复,所以我必须使用另一个字段进行另一个分组,但不确定我是否得到了正确的结果,有人能看到我是否以正确的方式进行吗

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_DATE305-JAN-2267562011年1月3日676

您可以始终对行进行分区:

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条款中。

尝试"过度分区"族。它是有效的。

最新更新