回答

收藏

试图了解over()和分区

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

我试图通过包裹在我头上的功能来解决问题。这是一个我不明白的例子。3 \& g" c! M6 {; E1 L, I; K% M. s
这是我的数据:; l' b8 D* u" A/ _0 f
SALESORDERID       ORDERDATE                                                 07/01/2001/20014386711                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 运行此查询时:5 i' q+ I# A# k+ @/ _
select Row_Number() over(partition by orderdate order by orderdate asc)     as Rownumber,salesorderid,orderdatefrom test2order by rownumber这是我的结果:
/ D- |# j5 y& r3 cROWNUMBER     SALESORDERID       ORDERDATE                      807/01/20001/20001111                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             有人可以向我解释这个查询。SQL并不陌生,但我一直在挣扎的窗口工作,无法解决这个问题。* ?& a6 ?% x, s! i# T
                                                                1 T6 U$ |0 i% V
    解决方案:                                                               
. C" Z% Z- ^) v7 l" J& x/ |1 @                                                                试着按照订单日期订购,你会更容易看到结果
6 [- g9 o6 @' z" c: G( a; H& mselect Row_Number() over(partition by orderdate order by orderdate asc)     as Rownumber,salesorderid,orderdatefrom test2order by orderdate;应该给(为了明确起见,我加了空行), R8 f" v  f. b! I9 y
ROWNUMBER     SALESORDERID       ORDERDATE                        507/01/20011111111                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              你会注意到结果被划分为分区,每个分区都是有相同订单日期的线路的集合。这意味着按订单日期划分。
6 }: V4 I  f+ i& Y. j在分区内,行按orderdate排序,如(按orderdate排序,按orderdate
4 o) M% f+ J! F/ K- [: Zasc第二句所示的排序)。这不是很有用,因为分区中的所有行都会有相同的orderdate。因此,分区中行的顺序是随机的。尝试在partition
# g6 S5 w; M" ~. O$ B( hby子句中按salesorderid为了获得更重复的结果,排序。
: S9 `5 i; d  z7 R/ i# T( M3 T- Rrow_number()只返回每个分区的顺序
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则