SQL:为每种产品选择最新销售

我要问你一个困扰我一段时间的问题。

我有这个数据库,注册一家商店的每笔交易,列如下:

SQL:为每种产品选择最新销售

产品代码对于每个商品都是唯一的(基本上是条形码),我想为查询中提供的每个product_code提取最新销售,所以我们说“ P914”,“ P959”和“ P953”作为输入,输出应为:

SQL:为每种产品选择最新销售

因此,我一直在尝试两种方法来实现此结果,第一种方法是使用简单的max()函数并通过以下方式分组:

select SALE_ID,max(DATE_OF_SALE) as DATE_MAX,PRODUCT_CODE,VENDOR
from SALES
where PRODUCT_CODE in ('P914','P953','P959')
and DATE_OF_SALE is not null
group by SALE_ID,VENDOR,PRODUCT_CODE    order by DATE_MAX desc;

我试图通过第二个选择来限制DATE_OF_SALE的第二种方法:

select t1.SALE_ID,t1.DATE_OF_SALE,t1.PRODUCT_CODE,t1.VENDOR
from SALES t1
where t1.PRODUCT_CODE in ('P914','P959')
and t1.DATE_OF_SALE = (select max(t2.DATE_OF_SALE) from SALES t2 where t2.SALE_ID = t1.SALE_ID group by product_code)
order by d_realisation desc;

两个查询都给出完全相同的结果:

SQL:为每种产品选择最新销售

我真的无法捕捉到我做错了什么以及如何正确地做。如果有人能帮助我,我将不胜感激

谢谢大家阅读!

sunnisha 回答:SQL:为每种产品选择最新销售

  

我想提取每个product_code的最新销售信息

您即将进行使用相关子查询进行过滤的第二次尝试。您只需要通过product_code进行关联并从子查询中删除group by子句:

select s.*
from sales s
where product_code in ('P914','P953','P959')
and s.date_of_sale = (
    select max(s1.date_of_sale) 
    from sales s1
    where s1.product_code = s.product_code
)
,

您可以按以下方式使用analytical function

Select * from
(Select t.*,Row_number() over (partition by product_code order by date_of_sale desc) as rn
From sales t
where product_code in ('P914','P959')
) where rn = 1

干杯!

,

您按sale_id +供应商+代码分组,这样您将获得每个销售/供应商/代码组合的最后一条记录,而不是每个sale_id的最后一条记录。

修复,仅按产品代码分组:

假设ID与您的示例中的sale_dates顺序相同:

select * from sales 
where sale_id in (
  select max(sale_id) 
  from sales
  group by (product_code)
)
本文链接:https://www.f2er.com/2912769.html

大家都在问