特定日期的销售总额(每位用户)

时间:2019-11-13 22:17:49

标签: sql teradata

我使用SQL的第一步,在此感谢您的帮助。我正在使用Teradata。

SELECT a.userID, a.CountryCD, a.VIPdate,
SUM (b.sales) AS Total_Sales
FROM usertable a
INNER JOIN salestable b ON a.userID = b.userID
WHERE a.VIPdate >= 2019/01/01
GROUP BY 1,2,3

这将为我提供以下信息:

userID | CountryCD | VIPdate    | Total_Sales
--------------------------------------------
4521   |US         |11/10/2019  |547
8414   |RU         |13/08/2019  |522
7583   |PL         |25/02/2020  |693
7833   |ES         |13/06/2021  |421
7875   |NL         |20/05/2022  |578
7855   |AU         |18/02/2023  |458

现在,如果要获取个人的总销售额,从他们成为VIP的日期起(a.VIPdate),如何考虑日期是可变的并且每个用户ID都是唯一的,如何获得它们?

3 个答案:

答案 0 :(得分:0)

我认为您想要这样的东西:

SELECT u.userID, u.CountryCD, u.VIPdate,
       SUM(s.sales) AS Total_Sales
FROM usertable u INNER JOIN
     salestable s
     ON u.userID = s.userID and
        s.salesdate >= u.VIPdate
WHERE s.VIPdate >= DATE '2019-01-01';

答案 1 :(得分:0)

我看不到您发布的图片,因此我正在处理您的查询。您应该可以使用条件SUM来做到这一点:

SELECT 
  a.userID, 
  MAX(a.CountryCD) AS CountryCD, -- wrap in a MAX() since it's not part of an aggregation
  MAX(a.VIPdate) AS VIPDate,
  SUM (b.sales) AS Total_Sales,
  SUM(
    CASE b.sales_date >= a.VIPdate THEN b.sales END
  ) AS sales_since_VIP -- get sales after VIP date
FROM usertable a
INNER JOIN salestable b ON a.userID = b.userID
GROUP BY a.userID
;

如果您想获得每个用户的结果,还需要像Fred提到的GROUP BY,否则它将对所有行执行SUM()

答案 2 :(得分:0)

我已经修改了问题,现在显示结果如何

这是一个虚拟的场景,因为我正在处理一个更复杂的数据库

也许使它成为子查询并从VIPdate获得总销售额?