sql - 测试 MIN 是否适用于 ROW_NUMBER
问题描述
情况:
我有三列:
- ID
- 日期
- tx_id
主 id 列是 tx_id 并且在表中是唯一的。每个 tx_id 都与一个 id 相关联,并且它有一个记录日期。我想测试 tx_id 是否是增量的。
客观的:
我需要通过 id 提取第一个 tx_id 但我想阻止使用ROW_NUMBER
ie
select id, date, tx_id, row_number() over(partition by id order by date asc) as First_transaction_id from table
并简单地使用
select id, date, MIN(tx_id) as First_transaction_id from table
那么,既然我有超过 5000 万个 id,我如何确保通过使用MIN
tx_id 将为每个 id 产生最早的交易呢?
如何添加标志列来细分不满足条件的那些?
解决方案
既然我有超过 5000 万个 id,我如何确保使用 MINtx_id 将为每个 id 产生最早的交易?
简单做个对比:
您可以使用如下逻辑获取异常:
select t.*
from (select t.*,
min(tx_id) over (partition by id) as min_tx_id,
rank() over (partition by id order by date) as seqnum
from t
) t
where tx_id = min_tx_id and seqnum > 1;
注意:这使用rank()
. 似乎有可能id
在同一日期有两笔交易。
推荐阅读
- django - 对 Django 子查询值执行算术运算
- r - 提取簇中至少 10% 的细胞表达的基因名称
- python - 在 10.0.0.0 IP 地址上托管烧瓶网络服务器意味着什么
- layout - 如何构建 ExtJS4 布局
- python - 如何在语音通道 discord.py 中授予所有权限
- angular - Angular 和 Asp.net 核心 CORS 问题
- c++ - C ++如何使用其他接口类型的方法从接口继承?
- node.js - Next.js - 使用 BigQuery 客户端库时出错:找不到模块:无法解析“child_process”
- java - 以字符串格式获取相对日期时间
- java - 导出可运行 Jar Eclipse