【问题标题】:How to use SQL to extract highest sales amount generated by a customer on their last transaction date?如何使用 SQL 提取客户在其最后交易日期产生的最高销售额?
【发布时间】:2019-04-02 10:58:44
【问题描述】:

我正在尝试确定客户在其最后交易日期产生的单次购买的最高销售额。

我尝试在订单日期和销售额上都使用最大功能,但是结果将显示客户在该日期进行的所有购买,而不仅仅是与最高销售额相关的一笔交易。如附图所示,这反过来为我提供了一个客户的多个客户密钥。下面是我使用的代码。

SELECT DISTINCT D.CustomerKey 'Customer Key',C.[OrderDate] 'Order Date', 
MAX(C.salesamount) 'Max Sales Amount'
FROM [dbo].[FactInternetSales] C 
INNER JOIN [dbo].[DimCustomer] 
D ON C.CustomerKey = D.CustomerKey 
WHERE C.[OrderDate]=
(SELECT max(C.orderdate) FROM [dbo[FactInternetSales] C 
WHERE D.CustomerKey = C.CustomerKey) 
GROUP BY D.customerkey,C.salesamount, C.OrderDate 
ORDER BY D.customerkey

我希望结果显示三列:客户键 - 但每个客户只有一列、他们最后一次购买的订单日期和该日期的最高销售额。

【问题讨论】:

  • 你有一些样本数据和这些数据的预期结果吗?

标签: sql tsql


【解决方案1】:

几分,GROUP BY 会给你一个独特的组合,所以不需要明确添加不同的,你也不必按销售额分组。以下修改后的查询将给出客户购买的每一天的最大销售额。

SELECT D.CustomerKey 'Customer Key',C.[OrderDate] 'Order Date', 
MAX(C.salesamount) 'Max Sales Amount'
FROM [dbo].[FactInternetSales] C 
INNER JOIN [dbo].[DimCustomer] 
D ON C.CustomerKey = D.CustomerKey 
WHERE C.[OrderDate]=
(SELECT max(C.orderdate) FROM [dbo[FactInternetSales] C 
WHERE D.CustomerKey = C.CustomerKey) 
GROUP BY D.customerkey, C.OrderDate 
Order by D.CustomerKey

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多