sql - 如何为在数据库中有多个日期的唯一用户显示最早的日期?
问题描述
假设我的输出如下所示(简化示例):
用户名 | 简介创建 | 购买价格 | 购买日期 |
---|---|---|---|
爱丽丝 | 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。
显然,我有一些想法如何在我的代码中进行一些预期的调整,但我希望看到任何愿意向我展示最佳方法的专家的解决方案。我真的只是一个菜鸟:-)
我很感激任何帮助,伙计们!
解决方案
注意:我对 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;
推荐阅读
- android - 在 android Studio 中找不到 MainActivity.Kt 和 activity_main.xml
- flutter - TextFormField Validator:错误边框未激活
- sql - 无法识别雪花时间戳“2015 年 1 月 23 日 23:02:39”中的日期时间
- drake - Nightly build 未获得 mosek 许可证
- php - PHP PDO SQL Server 无法通过 Ubuntu 终端连接
- network-programming - `select` 是否处理多个端点或多个套接字?
- excel - Excel函数自动递增
- php - 在登录我的 PHP 项目之前需要不同的 PHP 项目登录 - 为什么?
- python - robin_stocks .get_crypto_quote TypeError
- python-3.x - Python:如何使用 speech_recognition 或其他模块将 base64 音频字符串转换为文本?