【发布时间】:2021-04-26 18:19:43
【问题描述】:
我有一个包含以下类型表的数据库:
| customer_id | customer_type | customer_state | state_date |
|---|---|---|---|
| 1 | A | 0 | 2020-01-01 |
| 1 | A | 1 | 2020-01-05 |
| 1 | B | 2 | 2020-01-06 |
| 2 | X | 0 | 2019-02-07 |
| 2 | Y | 0 | 2019-02-07 |
| 2 | X | 0 | 2019-02-07 |
customer state 和 state_date 列表示客户当前状态随时间的演变,而customer_id 显然是客户的唯一标识符。
我有兴趣获取一个表(使用 SQL 查询),其中包含一个附加列 first_type,该列告诉每个客户它拥有的第一个状态,如下例所示:
| customer_id | customer_type | customer_state | state_date | first_type |
|---|---|---|---|---|
| 1 | A | 0 | 2020-01-01 | A |
| 1 | A | 1 | 2020-01-05 | A |
| 1 | B | 2 | 2020-01-06 | A |
| 2 | X | 0 | 2019-02-07 | X |
| 2 | Y | 0 | 2019-02-07 | X |
| 2 | X | 0 | 2019-02-07 | X |
可以在 SQL 中实现吗?我尝试过自加入,但我很难理解如何选择每个客户的第一行,或者通常是 n-th 行。
具体来说,我正在使用 Teradata SQL,如果某些特定功能可用于此任务。
【问题讨论】:
-
您使用的是 MySQL 还是 SQL Server,或者正如您在结束时所说的那样,Teradata?拥有 7K+ 代表的人应该知道如何正确标记。
-
Teradata 不是 MySQL 或 SQL Server - 有一个 Teradata 标签。请向我们展示您的尝试并解释您遇到的问题。
-
确实是在一周前开始使用数据库的。我的数据库是 Teradata,是的。据了解,虽然它是一种 SQL 方言,但标准 SQL 命令应该可以工作,对吧?
-
SQL 表代表 无序 集(技术上,多集)。根据您提供的信息,无法区分最后三行。没有“第一”。
标签: sql inner-join teradata self-join