首页 > 解决方案 > 如何为在数据库中有多个日期的唯一用户显示最早的日期?

问题描述

假设我的输出如下所示(简化示例):

用户名 简介创建 购买价格 购买日期
爱丽丝 2019 年 12 月 21 日上午 6:00 120.00 2019 年 12 月 21 日上午 8:00
爱丽丝 2019 年 12 月 21 日上午 6:00 90.00 2019 年 12 月 25 日上午 9:00
爱丽丝 2019 年 12 月 21 日上午 6:00 150.00 2020 年 1 月 2 日上午 10:00
鲍勃 2020 年 1 月 1 日晚上 9:00 50.00 2020 年 1 月 3 日晚上 11:00
鲍勃 2020 年 1 月 1 日晚上 9:00 70.00 2020 年 1 月 7 日晚上 11:00

这个输出的代码看起来像这样,我猜(不是那么重要):

SELECT
UserName, ProfileCreation, PurchasePrice, PurchaseDate
FROM Some_Random_Database

但我想要的输出应该是这样的:

用户名 简介创建 购买价格 首次购买日期 购买次数 AvgOfPurchasePrice
爱丽丝 2019 年 12 月 21 日 120.00 2019 年 12 月 21 日 3 120.00
鲍勃 2020 年 1 月 1 日 50.00 2020 年 1 月 3 日 2 60.00

希望我的目标是可以理解的 - 让唯一的用户知道他/她最早的购买日期以及所有购买的一些计算指标。第一次购买的价格可以保留,但没有必要。

我正在用 SOQL 方言写作 - Salesforce Marketing Cloud。

显然,我有一些想法如何在我的代码中进行一些预期的调整,但我希望看到任何愿意向我展示最佳方法的专家的解决方案。我真的只是一个菜鸟:-)

我很感激任何帮助,伙计们!

标签: sqlsoqlsalesforce-marketing-cloud

解决方案


注意:我对 Salesforce Marketing Cloud 一无所知,但是...

有几种方法可以实现:

#1 - 标准 sql

SELECT UserName, ProfileCreation
  , MIN(PurchaseDate) FirstPurchaseDate
  , COUNT(PurchasePrice) NoOfPurchases
  , AVG(PurchasePrice) AvgPurchasePrice
FROM Foo
GROUP BY UserName, ProfileCreation;

#2 - 窗口函数

SELECT DISTINCT UserName, ProfileCreation
  , MIN(PurchaseDate) OVER(PARTITION BY UserName ORDER BY UserName) FirstPurchaseDate
  , COUNT(PurchasePrice) OVER(PARTITION BY UserName ORDER BY UserName) NoOfPurchases
  , AVG(PurchasePrice) OVER(PARTITION BY UserName ORDER BY UserName) AvgPurchasePrice
FROM Foo;

推荐阅读