【问题标题】:Finding Historical Category of Product Based on Sale Date根据销售日期查找产品的历史类别
【发布时间】:2015-11-11 23:24:51
【问题描述】:

希望有人可以帮助我解决以下问题。基本上,我所有的产品线都有销售。我正在使用此表查找已售出的保修以及保修所附的产品。然后我尝试按它所附加的产品类别对其进行分组。

销售行表包含所有保修、附加产品 sku、销售日期时间和保修类别。我正在尝试将其加入到具有产品 sku、类别的有效日期时间以及该生效日期的产品类别的历史类别表中。

我无法弄清楚如何准确地进行连接,因此提取的数据是销售日期时间的历史类别。在我查看的时间段内,产品可以多次更改类别,因此历史表中的同一项目有多个条目。

使用 SQL Server,感谢您的帮助。

这是我目前所拥有的:

SELECT 
a.[Invoice Number]
,a.[SKU]  
,a.[Item Category Code]      
,a.[Sale Date]    
,b.[Effective Date]  
,b.[Category Code]   
FROM [Sales Invoice Line] a
LEFT JOIN [Item Category Division History] b ON a.[Warranty Item_Resource No_] = b.[Item No_] 
WHERE [Sales Date] between '2013-10-01' and '2014-09-30' AND b.[Division Code] is not null 

【问题讨论】:

  • 请提供一些你试过的sql。评估您的问题会更容易
  • 您需要历史表中最新或最历史日期的项目吗?
  • 我需要商品在销售时设置的商品类别。我认为我需要做的是在我正在查看的日期范围的历史表上创建一个 where 语句,然后让它仅拉出最近的生效日期,即
  • 【物品分类划分历史】有PK吗?

标签: sql sql-server


【解决方案1】:

我不完全了解您的表格以及它们之间的关系。但我认为以下内容会给你这个想法。

假设您有 2 个表 Sales 和 History,如下所示;

销售表

Date | Item | Invoice_number

历史表

Date | Item | Category

你想要一个报告为;

Invoice_number | Item | Category

其中 category 是该商品截至销售日期有效的类别,您可以使用以下内容;

Select s.invoice_number, s.Item, h.category
FROM sales s
INNER JOIN history h
ON s.item = h.item
INNER JOIN (
    Select MAX(h.date) date, s.invoice_number, s.item
    From sales s
    Inner Join history h
    ON s.item = h.item AND h.date <= s.date
    Group By s.invoice_number, s.item
)a on a.date = h.date AND a.item = s.itme AND a.invoice_number = s.invoice_number

内部查询查找date,在每次销售之前,category 最后一次更改为item。然后将其用作Inner Join 来过滤包含category 的外部查询。

我们不能在内部查询中包含类别,因为它还需要按类别分组,并且它会为在销售日期之前分配项目的每个类别返回一条记录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-27
    • 1970-01-01
    • 2020-07-24
    • 2022-06-15
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多