测试MIN是否会超过ROW_NUMBER

时间:2019-03-06 13:23:44

标签: sql sql-server

情况:

我有三列:

  • id
  • 日期
  • tx_id

主ID列是tx_id,在表中是唯一的。每个tx_id都与一个ID相关联,并且有一个记录日期。我想测试tx_id是否为增量。

目标:

我需要按ID提取第一个tx_id,但我想避免使用ROW_NUMBER

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产生最早的交易?

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

2 个答案:

答案 0 :(得分:1)

  

由于我拥有超过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可能在同一日期进行两次交易。

答案 1 :(得分:0)

使用相关的sunquery

select t.* from table_name t
where t.date= ( select min(date) from table_name
                 t1 where t1.id=t.id)