sql在子集中创建序列号-Apache derby

问题描述 投票:1回答:1

能够使用以下查询生成序列号

CREATE SEQUENCE seqno AS integer
START WITH 1;

SELECT t1.*,
   (NEXT VALUE
    FOR seqno) AS seqno
FROM
  (SELECT l.TRANSACTION_ID,
      l.HSN
   FROM RWLINEITEM l
   WHERE l.TRANSACTION_ID IN ('CS610-20-10003','CS610-20-10002')
   GROUP BY l.TRANSACTION_ID,l.HSN) t1

这给出结果

Sql Output

例如,要求通过交易和HSN生成序列号

Expected result

有什么方法可以得到这个结果。使用derby-10.13.1.1

sql derby window-functions
1个回答
0
投票

您正在描述窗口功能row_number(),此功能自10.4版开始在Derby中可用:

select 
    transaction_id, 
    hsn, 
    row_number() over(partition by transaction_id order by hsn) seqno
from rwlineitem l
where transaction_id in ('CS610-20-10003','CS610-20-10002')

我不清楚您为什么首先需要在子查询中进行汇总(您可能希望删除重复项),因此我删除了该部分;随时根据需要将其添加回去。可能将其表述为:

select distinct 
    transaction_id,
    hsn,
    dense_rank() over(partition by transaction_id order by hsn) seqno
from rwlineitem l
where transaction_id in ('CS610-20-10003','CS610-20-10002')
© www.soinside.com 2019 - 2024. All rights reserved.