【发布时间】:2021-11-03 12:21:36
【问题描述】:
我有一个包含 3 列 Serviceid、Date、User_id 的表“购买”
一些数据如下所示:
20 2-Jan-18 40709217
20 2-Jan-18 40709217
40 2-Jan-18 40709217
40 2-Jan-20 40709217
50 2-Jan-21 40709217
984 22-Mar-18 18246539
269 22-Mar-18 18246539
666 1-Apr-18 18246539
我的查询请求是:
对于每个 'user_id',获取以下信息:
- 用户购买的前 2 个最早的 ServiceId 和日期
- 用户最近购买的 ServiceId 和 Date
- 用户购买的服务计数
结果表的列必须遵循以下顺序: User_id、FirstServiceid、SecondServiceid、FirstServiceDate、SecondServiceDate、LastServiceid、LastServiceDate、TotalService。
预期输出:
| User_id | FirstServiceid | SecondServiceid | FirstDate | SecondDate | LastServiceid | LastDate | TotalServices |
|---|---|---|---|---|---|---|---|
| 40709217 | 20 | 40 | 2-Jan-18 | 2-Jan-20 | 50 | 2-Jan-21 | 5 |
| 18246539 | 984 | 666 | 22-Mar-18 | 1-Apr-18 | 666 | 1-Apr-18 | 3 |
我的想法是进行聚合,然后将它们连接在一起,但我遇到了这个错误
“列 'purchase.Serviceid' 在选择列表中无效,因为它 不包含在聚合函数或 GROUP BY 中 条款”
调用最新的Serviceid和Date时:
select user_id, max(date), serviceid
from purchases
group by user_id
如何克服这个问题,有没有更好的方法来聚合大量信息而无需使用 JOIN?
【问题讨论】:
-
您可以从示例中的输入值中添加预期的输出值吗?
-
@Magnus 我编辑了!
-
为什么 SecondServiceid 是 40 而不是 20?你想要不同的 SecondServiceid 吗?
-
您使用的是哪个数据库管理系统(例如mysql/sqlserver/postgres等)以及什么版本?
-
@AnkitBajpai 因为用户 40709217 购买东西的第二个日期是 2-Jan-20,而那是 Serviceid 40!
标签: sql