sql - 如何使用 SQL 从另一个表中的一个表中查找第一个匹配结果?
问题描述
假设我有两张桌子:
Customer -
ID | Name | Etc
1 | One |
2 | Two |
3 | Three |
4 | Four |
5 | Five |
... | ... |
Sales -
Customer ID | Date | Amount
5 | 1/20 | $45
5 | 3/19 | $145
3 | 8/19 | $453
7 | 3/20 | $4513
3 | 9/20 | ...
1 | 3/20 | ...
1 | 1/20 | ...
我想做的是编写一个查询,为每个客户找到第一笔销售。我不确定该怎么做。我觉得这是按问题分组的,但答案并没有出现。
编辑:我觉得我的第一个数据表并没有完全解释我的问题。(老实说,在我编写解决方案之前,我什至没有意识到我的问题的这一方面) 注意:每次销售有多个客户。
Sales -
Sale ID | Customer ID | Date | Amount
1 | 5 | 1/20 | $45
5 | 5 | 3/19 | $145
8 | 3 | 8/19 | $453
7 | 7 | 3/20 | $4513
3 | 4 | 9/20 | ...
2 | 1 | 3/20 | ...
1 | 1 | 1/20 | ...
解决方案
您可以使用子查询为每个客户的每个销售分配一个行号,按日期升序排序,然后仅选择第一行:
SELECT "Customer ID", "Date", "Amount"
FROM (
SELECT "Customer ID", "Date", "Amount",
ROW_NUMBER() OVER (PARTITION BY "Customer ID" ORDER BY "Date") AS rn
FROM Sales) s
WHERE rn = 1
推荐阅读
- php - PHP preg_match_all 在比赛之间获取信息
- html - 将 flexbox 项目推送到桌面视图的右侧
- javascript - 警告:包装外部组件时的未知道具”
- dialogflow-es - Dialogflow V2 - 自定义上下文
- python - 这种排序有名称吗?什么样的数据对排序有效?
- html - 使用填充与高度(使用vh)与最小高度定义网页中部分高度的最佳实践是什么
- java - 与 AWS Dynamodb 集成的微服务应用程序中的 BeanCreationException
- javascript - 有什么方法可以读取我们包含在 img 标签的 src 中的脚本/图像的响应标头
- android - 调用另一个片段的视图寻呼机索引上的片段的 onActivityResult
- php - PDO 多个查询工作,除了 SELECT 查询