回答

收藏

试图了解over()和分区

技术问答 技术问答 364 人阅读 | 0 人回复 | 2023-09-14

我试图通过包裹在我头上的功能来解决问题。这是一个我不明白的例子。9 K. V" r! ?$ y# w
这是我的数据:
. A. s/ r2 `: @* ]' J6 _. l; gSALESORDERID       ORDERDATE                                                 07/01/2001/20014386711                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 运行此查询时:/ M' }' C( G9 _6 N+ ]( S
select Row_Number() over(partition by orderdate order by orderdate asc)     as Rownumber,salesorderid,orderdatefrom test2order by rownumber这是我的结果:7 `% p# Y1 K( I6 O
ROWNUMBER     SALESORDERID       ORDERDATE                      807/01/20001/20001111                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             有人可以向我解释这个查询。SQL并不陌生,但我一直在挣扎的窗口工作,无法解决这个问题。4 W  u/ O. B& q- R: x& D9 n
                                                                + e- |0 X$ O/ {7 w3 A
    解决方案:                                                               
% y! Z1 k& ~; k% X2 N9 c6 _7 P1 K                                                                试着按照订单日期订购,你会更容易看到结果) Q, J8 p' x% r% m. M
select Row_Number() over(partition by orderdate order by orderdate asc)     as Rownumber,salesorderid,orderdatefrom test2order by orderdate;应该给(为了明确起见,我加了空行)9 J4 A5 |' r) ?7 V# [4 P3 v
ROWNUMBER     SALESORDERID       ORDERDATE                        507/01/20011111111                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              你会注意到结果被划分为分区,每个分区都是有相同订单日期的线路的集合。这意味着按订单日期划分。, J. H$ O" N# X* p* N
在分区内,行按orderdate排序,如(按orderdate排序,按orderdate4 [# P# Q' J9 A5 y+ V3 Y8 u
asc第二句所示的排序)。这不是很有用,因为分区中的所有行都会有相同的orderdate。因此,分区中行的顺序是随机的。尝试在partition- R1 I( a4 D" |( F( j% @& m( {, u+ c: W
by子句中按salesorderid为了获得更重复的结果,排序。9 \: C- R3 f4 C' m
row_number()只返回每个分区的顺序
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则