Esta consulta é baseada em 2 tabelas em que algumas linhas PerfData1
possuem vários registros filho. As linhas não são duplicadas, mas alguns id
s são. Eu preciso pegar apenas 1 dessas linhas e isso também é uma consulta de paginação, que precisa obter o número total ou itens existentes e um subconjunto final.
A consulta funciona bem. No entanto, não tenho certeza se a ordem definida na visualização embutida (inner ORDER BY
) será mantida na saída final. Até agora, não se viu nenhum desvio. Mas lembro que no mundo SQL Server isso não é garantido, por isso preciso de 2 ORDER BY
cláusulas.
SELECT
All_Results_Table.*
FROM
(
SELECT
Rownum_Table.*,
COUNT(*) OVER() as sys___countAllFoundRecords,
ROWNUM sys___outputRownum
FROM
(
SELECT
ROW_NUMBER() OVER(PARTITION BY PerfData1.id ORDER BY PerfData1.id) AS sys___multivalueRowSequence, -- This is OPTIONAL when we DON'T want dupe IDs
ROW_NUMBER() OVER(order by 1) AS sys___innerRowNumber,
PerfData1.id,
PerfData1.c1 item,
PerfData2.c1 subitem
FROM
PerfData1 inner join
PerfData2 on PerfData1.id = PerfData2.fkId
WHERE (1 = 1)
ORDER BY id, subitem desc --<<-- WILL THIS ORDER STAY in the FINAL OUTPUT
) Rownum_Table
WHERE sys___multivalueRowSequence = 1 -- This is OPTIONAL when we DON'T want dupe IDs
) All_Results_Table
WHERE
sys___outputRownum BETWEEN 200 AND 230
A ordem definida no ORDER BY
SQL acima será mantida na saída final?