【发布时间】:2020-06-25 00:16:50
【问题描述】:
对于另一个关于在数组中查找最近日期的问题,我深表歉意。
很遗憾,我没有找到任何其他满足我特殊需求的帖子。
- 第 1 列是用户 ID
- 第 2 列是发生的操作类型,并且
- 第 3 列是操作发生的日期时间戳
我的目标是按 user_id 分组,并将不同操作类型的最新列作为自己的列。
示例数据:
+---------+--------+------------+
| user_id | source | created |
+---------+--------+------------+
| 1 | QT | 2020-01-01 |
| 2 | QT | 2020-01-02 |
| 3 | QT | 2020-01-01 |
| 1 | QT | 2020-01-03 |
| 2 | QT | 2020-01-04 |
| 3 | QT | 2020-01-05 |
| 1 | AT | 2020-01-02 |
| 2 | AT | 2020-01-02 |
| 3 | AT | 2020-01-03 |
+---------+--------+------------+
期望的结果:
+---------+------------+------------+
| user_id | max QT | Max AT |
+---------+------------+------------+
| 1 | 2020-01-03 | 2020-01-02 |
| 2 | 2020-01-04 | 2020-01-02 |
| 3 | 2020-01-05 | 2020-01-03 |
+---------+------------+------------+
我最初的想法是:
```select
user_id
,case when source = 'QT' THEN max(created) END as "last_QT"
,case when source = 'AT' THEN max(created) END as "last_AT"
from analytics.all_tx_bars_all
group by user_id```
但这给了我错误: 无效操作:列“source”必须出现在 GROUP BY 子句中或在聚合函数中使用
当我将“来源”包含在分组中并选择如下时:
```select
user_id
,source
,case when source = 'QT' THEN max(created) END as "last_QT"
,case when source = 'AT' THEN max(created) END as "last_AT"
from analytics.all_tx_bars_all
group by user_id,source```
我得到类似的东西:
+---------+--------+------------+------------+
| user_id | source | max QT | Max AT |
+---------+--------+------------+------------+
| 1 | QT | 2020-01-03 | |
| 2 | QT | 2020-01-04 | |
| 3 | QT | 2020-01-05 | |
| 1 | AT | | 2020-01-02 |
| 2 | AT | | 2020-01-02 |
| 3 | AT | | 2020-01-03 |
+---------+--------+------------+------------+
为了给我的问题增添一点色彩,我在这里使用元数据库中的 SQL 工具
【问题讨论】:
标签: sql date pivot amazon-redshift