首页 > 解决方案 > 测试 MIN 是否适用于 ROW_NUMBER

问题描述

情况:

我有三列:

主 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,我如何确保通过使用MINtx_id 将为每个 id 产生最早的交易呢?

如何添加标志列来细分不满足条件的那些?

标签: sqlsql-server

解决方案


既然我有超过 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在同一日期有两笔交易。


推荐阅读