问题描述
假设我的输出看起来像这样(简化示例):
用户名 | 个人资料创建 | 购买价格 | 购买日期 |
---|---|---|---|
爱丽丝 | 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);