在嵌套SQL DB2查询中使用ROW_NUMBER()OVER()时,返回错误的顺序

在嵌套SQL DB2查询中使用ROW_NUMBER()OVER()时,返回错误的顺序,db2,sql-order-by,rownum,Db2,Sql Order By,Rownum,我希望下面的查询删除此select查询返回的相同行: select emp_id, row_number(), over() as row_num from employee order by date_z desc 删除查询: delete from ( select emp_id, row_number(), over() as row_num from employee order by date_z desc ) where row_num < 100 但嵌套查询时,行数

我希望下面的查询删除此select查询返回的相同行:

 select emp_id, row_number(), over() as row_num from employee order by date_z desc
删除查询:

 delete from ( select emp_id, row_number(), over() as row_num from employee order by date_z desc ) where row_num < 100 
但嵌套查询时,行数顺序完全颠倒。 因此,我最终删除了最后100行,而不是前100行

对我来说,一个可行的解决方案是:

 delete from ( select emp_id, row_number(), over(order by date_z desc) as row_num from employee order by date_z desc ) where row_num < 100 
但我浏览过的大多数网络链接都认为,在over中按子句下订单并不能确保正确的顺序。实现这一目标的正确方法是什么?

不妨试试

delete from
(select emp_id from employee order by date_z desc fetch first 100 rows only)
不需要对行进行编号


编辑:根据9.7 LUW的官方文档,您使用overorder by date_z desc的方法也是正确的。

FYI,当where子句从查询中删除时,顺序就变好了。不,我的用例有点不同。我想在保留前100行后删除所有行,而不考虑行的总数。因此,如果有x行,我想删除x-100行,这样删除的行就是日期最早的行。这是我的实际查询:从选择emp_id,row_number中删除,作为row_num从日期描述的员工订单中删除,其中row_num>100。我现在想知道,在over中放置order子句在概念上是否是正确的方法,因为这给了我正确的答案result@u009988似乎表明这是正确的方法。您没有指定正在使用的版本,但至少对于其他LUW版本,它应该是相同的