根据销售日期查找产品的历史类别

时间:2015-08-18 20:51:19

标签: sql sql-server

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

销售线表包含所有保修,附加产品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 

1 个答案:

答案 0 :(得分:1)

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

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

销售表

Date | Item | Category

历史表

Invoice_number | Item | 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

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

date

内部查询会在每次促销之前查找category上次更改item Inner Join的{​​{1}}。然后将其用作category来过滤包含{{1}}的外部查询。

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