如何为在数据库中有多个日期的唯一用户显示最早的日期?

问题描述

假设我的输出看起来像这样(简化示例):

用户名 个人资料创建 购买价格 购买日期
爱丽丝 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

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

用户名 个人资料创建 购买价格 首次购买日期 购买次数 平均购买价格
爱丽丝 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。

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

我感谢任何帮助,伙计们!

解决方法

注意:我对 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,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;
,

选择 用户名、个人资料创建、购买价格、购买日期 从 Some_Random_Database 在哪里 (用户名,购买日期)IN (SELECT UserName,max(PurchaseDate) FROM Some_Random_Database GROUP BY UserName);