庆云php

庆云php

开窗涵数取第一条时,一定要使排序唯一,不然最后在不同的查询条件下,得到的结果将会是不一样的

PHP 0

2023年11月20日 每日一猜答案: 答案:ABC
每日一猜答案分析:

使用 ROW_NUMBER ( ) OVER ( PARTITION BY  开窗涵数时,这个开窗排序 是最后执行的 也就是先确定行数 再给你结果的。 因为我的排序的ts值相同,在加了查询条件时,取的下边那条,不加时,取的上边那条。 最外层的where 有时候也会影响 内层结果,就是外层的where影响了内层的结果。会影响内部开窗函数结果,外层无where时,取了第一条记录,外层指定了P字段时,取了第二条记录。 解决办法,暂时现在增加了排序字段。使排序做到唯一。 这个是oracle数据库。数据库不同,就是语法上 会有些不一样,sqlserver也是这样的。所以同学们在使用 开窗涵数 取第一条时,一定要使排序唯一,不然最后在不同的查询条件下,得到的结果将会是不一样的。
SELECT * FROM p
LEFT JOIN (
SELECT a.* FROM
( SELECT z.id,z.ts, ROW_NUMBER ( ) OVER ( PARTITION BY z.id ORDER BY z.ts DESC ) xx 
FROM z 
) a WHERE a.xx = 1 
) job ON job.id = p.id
WHERE
p.code='222'