1

我正在尝试使用和学习 Partition By 来返回一对多关系的最大步数。基本上,我有一个 companyID,它在公司表中是唯一的。公司有特定的步骤,在 StepCompany 表中可以有很多。companID 存在于 stepCompany 表中该公司可能存在的每个步骤。这些步骤有 StepOrder,我需要使用它来始终返回这些步骤中的 MAX。但是我需要一个查询来返回公司和 stepCompany 的信息,这取决于哪一步基本上是该公司队列中的最后一步。我发现我不理解的来源,因为我是 Partition By 的新手,或者他们给 Partition By 一个别名,并且在外部选择的末尾,他们确实喜欢 alias = 1 例如。
这是没有分区或任何内容的查询返回。

CompanyIDticketID|||| companyCompanyID||| stepCompanyCompanyID|||| stepCompanyStepOrder
----------------- ---------------- -------------------- --------------------
136211     ||||       10B7E005     |||    10B7E005      |||       1

136211     ||||       10B7E005     |||    10B7E005      |||       2

136211     ||||       10B7E005     |||    10B7E005      |||       3

155585     ||||       3A2078C5     |||    3A2078C5      |||       1

155585     ||||      3A2078C5      |||   3A2078C5       |||       2

193256     ||||       95AC74FB     |||    95AC74FB      |||       1

193256     ||||       95AC74FB     |||    95AC74FB      |||       2

210425     ||||       0BAD0261     |||    0BAD0261      |||       1

210425     ||||       0BAD0261     |||    0BAD0261      |||       2

抱歉格式错误,不知道如何在这里整齐地创建表格。

所以这些是 2 个正在连接的表。companyCompanyID = stepCompanyCompanyID 用于加入他们。所以对于 companyID 136211 我需要 stepCompanyStepOrder 3 返回,显然 stepCompany 表中的数据。对于 companyIDticketID 155585 我需要 stepCompanyStepOrder 2 等。我宁愿不提供我的 SQL,因为它不漂亮:)

我感谢大家的帮助!

谢谢,

4

2 回答 2

1

这是部分查询,

WITH records
AS
(
    SELECT  ....,
            ROW_NUMBER() OVER (PARTITION BY CompanyIDticketID
                               ORDER BY stepCompanyStepOrder DESC) rn
    FROM    ....
)
SELECT  *
FROM    records
WHERE   rn = 1

您只需在WITH子句中插入连接查询并添加额外的列来分区记录。

于 2013-04-09T15:15:01.740 回答
1

没有加入,因为你没有提供它,但这应该没关系:

WITH cte 
     AS (SELECT rn = Row_number() 
                     OVER( 
                       partition BY companycompanyid 
                       ORDER BY stepcompanysteporder DESC), 
                companyidticketid, 
                companycompanyid, 
                stepcompanycompanyid, 
                stepcompanysteporder 
         FROM   dbo.tablename) 
SELECT companyidticketid, 
       companycompanyid, 
       stepcompanycompanyid], 
       stepcompanysteporder 
FROM   cte 
WHERE  rn = 1; 

演示

结果:

COMPANYIDTICKETID   COMPANYCOMPANYID    STEPCOMPANYCOMPANYID    STEPCOMPANYSTEPORDER
210425          0BAD0261            0BAD0261                    2
136211          10B7E005            10B7E005                    3
155585          3A2078C5            3A2078C5                    2
193256          95AC74FB            95AC74FB                    2
于 2013-04-09T15:15:48.997 回答