回答

收藏

试图了解over()和分区

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

我试图通过包裹在我头上的功能来解决问题。这是一个我不明白的例子。7 ]5 i; y$ k  x& W9 Y* t& W# F
这是我的数据:9 j5 x; h% |2 ]- Q5 N' c' C  K
SALESORDERID       ORDERDATE                                                 07/01/2001/20014386711                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 运行此查询时:
# |; g0 R+ u4 V( s. Zselect Row_Number() over(partition by orderdate order by orderdate asc)     as Rownumber,salesorderid,orderdatefrom test2order by rownumber这是我的结果:5 y. ]5 Z2 x- q1 U% Y+ R
ROWNUMBER     SALESORDERID       ORDERDATE                      807/01/20001/20001111                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             有人可以向我解释这个查询。SQL并不陌生,但我一直在挣扎的窗口工作,无法解决这个问题。
9 @  C3 w! K* Q7 i/ f$ R                                                               
& Y& i! h) |' L* V+ ]. U5 O    解决方案:                                                                7 q/ Z. g" c5 K2 H
                                                                试着按照订单日期订购,你会更容易看到结果- Z0 P' D6 D1 ^' L
select Row_Number() over(partition by orderdate order by orderdate asc)     as Rownumber,salesorderid,orderdatefrom test2order by orderdate;应该给(为了明确起见,我加了空行)
  d! R1 R) F5 h1 ?ROWNUMBER     SALESORDERID       ORDERDATE                        507/01/20011111111                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              你会注意到结果被划分为分区,每个分区都是有相同订单日期的线路的集合。这意味着按订单日期划分。- q: o9 O) x& x6 `+ \2 J. f
在分区内,行按orderdate排序,如(按orderdate排序,按orderdate
# W  _$ o5 G: z; jasc第二句所示的排序)。这不是很有用,因为分区中的所有行都会有相同的orderdate。因此,分区中行的顺序是随机的。尝试在partition5 E& \+ o9 n6 _% u. N) _
by子句中按salesorderid为了获得更重复的结果,排序。# u& C! r7 l! }9 ^7 }- ~* ]; @2 D
row_number()只返回每个分区的顺序
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则