Кажется, что Derby не полностью поддерживает стандартную оконную функцию row_number()
.
Типичный подход для эмуляции этого состоит в использовании подзапроса, который подсчитывает, сколько строк имеют одинаковые transaction_id
и меньшие hsn
, вот так:
select
transaction_id,
hsn,
1 + coalesce(
(
select count(*)
from rwlineitem l1
where l1.transaction_id = l.transaction_id and l1.hsn < l.hsn
),
0
) seqno
from rwlineitem l
where transaction_id in ('CS610-20-10003','CS610-20-10002')
order by transaction_id, hsn
Обратите внимание, что при наличии дубликатов (transaction_id, hsn)
кортежей они получат тот же seqno
. Это похоже на то, как работает оконная функция rank()
. Если вам нужен уникальный номер, вы можете попробовать добавить еще один случайный критерий сортировки:
select
transaction_id,
hsn,
1 + coalesce(
(
select count(*)
from rwlineitem l1
where
l1.transaction_id = l.transaction_id
and (
l1.hsn < l.hsn
or (l1.hsn = l.hsn and random() < 0.5)
)
),
0
) seqno
from rwlineitem l
where transaction_id in ('CS610-20-10003','CS610-20-10002')
order by transaction_id, hsn