mysql - Mysql:如何找出日期范围内每个客户的第n次交货
问题描述
要求包括找出在特定日期范围内第 5 次交货的客户
我的数据看起来如下:
|ID|customer|sale_date | amount|
=================================
|1 | 10 | 2021-02-09 |100|
|2 | 10 | 2021-02-10 |100|
|3 | 10 | 2021-02-11 |100|
|4 | 10 | 2021-02-12 |100|
|5 | 10 | 2021-02-13 |100|
|6 | 10 | 2021-02-14 |100|
|7 | 10 | 2021-02-15 |100|
|8 | 12 | 2021-02-09 |100|
|9 | 12 | 2021-02-10 |100|
|10 | 12 | 2021-02-11 |100|
|11 | 12 | 2021-02-12 |100|
|12 | 12 | 2021-02-13 |100|
|13 | 12 | 2021-02-14 |100|
|14 | 12 | 2021-02-15 |100|
|15 | 12 | 2021-02-16 |100|
|16 | 15 | 2021-02-04 |100|
|17 | 15 | 2021-02-06 |100|
|18 | 15 | 2021-02-10 |100|
我期待什么:
| ID| customer| sale_date | amount|
=====================================
|1 |10 | 2021-02-13 |100|
|2 |12 | 2021-02-13 |100|
解决方案
在 MySQL 8+ 上,我们可以ROW_NUMBER
在这里使用:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY customer ORDER BY sale_date) rn
FROM yourTable
)
SELECT ID, customer, sale_date, amount
FROM cte
WHERE rn = 5 AND sale_date >= '2021-02-01' AND sale_date < '2021-02-16;
推荐阅读
- python - seaborn swarmplot 中的水平图
- css - css INLINE-BLOCK div 居中对齐但保持内部元素仍左对齐
- node.js - 异步/等待错误返回 Promise {
} - powershell - 如何在 PowerShell 中返回自定义错误级别?
- mysql - 如何删除 SQL 中的重复(两行混合)行?
- node.js - 基于 swagger 文件验证请求的独立 NPM 库
- r - 将两个 data.frame 中的公共列与第一列中的常用词平均到第三个 data.frame
- here-api - 需要澄清内部错误
- c# - 根据开始和结束地理坐标以指定间隔划分地理线
- ios - 有没有办法符号化 Xcode 能源报告?