mysql - 提取最新的非零收入行
问题描述
样本数据:
输入 :
product_name| snapshot_time (varchar)| revenue (varchar) |
product_A | 2021-07-01 | $0.0 |
product_A | 2021-04-01 | $30.12 |
product_A | 2021-06-01 | $12.23 |
product_B | ...... | ...... |
product_C | ...... | ....... |
......
输出应该是:
product_name| snapshot_time (varchar)| revenue (varchar) |
product_A | 2021-06-01 | $12.23 |
product_B | lastest time | non zero value |
product_C | lastest time |non zero value |
......
要求是:
对于每个产品:
- 如果有任何非零收入记录:
提取最新的非零收入行
- 如果所有记录都是
$0.0
:
提取最新的$0.0
收入行
我试过:
with t as (
select *, row_number() over(partition by product_name order by snapshot_time desc, revenue desc) as rnk
from sample_data)
SELECT product_name, snapshot_time, revenue
FROM t where rnk = 1;
但这是错误的,因为它可能会提取该$0.0
行。
解决方案
考虑这个版本:
WITH t AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY product_name
ORDER BY revenue > 0 DESC, snapshot_time DESC) rn
FROM sample_data
)
SELECT product_name, snapshot_time, revenue
FROM t
WHERE rn = 1;
推荐阅读
- python - 如何检查 X 分钟内是否没有消息发送?(discord.py)
- android-studio - Android:将已检查的项目从 ListView 传递到具有 ListView 的另一个活动
- sql-server - 使用 SQL Server 中的列标题将单行的列值转换为 2 列
- android - 如何在点击时显示未安装的 Whatsapp
- asp.net-core-middleware - 获取中间件数据并在类或控制器中使用 - ASP.NET Core 3.1
- css - 将 min(max()) 从 CSS 转换为 SASS
- c++ - 奇怪的密码加密问题 C++ 任何类似的密码都可以使用,
- html - CSS 和图像未在 Spring Boot 的 index.html 中加载
- c# - 如何从 XmlRpcClientProtocol.Invoke 获取请求 XML
- laravel - 从 if 语句中获取我的值以显示在 laravel 中的 if 语句之外