使用分区依据从Join SQL返回MAX记录

时间:2013-04-09 15:10:31

标签: sql sql-server-2005 max partitioning

我正在尝试使用和学习分区依据来返回一对多关系的最大步数。 基本上,我有一个companyID,这在公司表中是唯一的。公司有一些步骤,但在StepCompany表中可以有很多步骤。对于该公司在stepCompany表中可能存在的每个步骤,都存在companID。这些步骤有StepOrder,这是我需要用来始终返回那些的MAX。但我需要一个查询来返回公司和stepCompany的信息,这些信息基本上是该公司队列中的最后一步。 源代码我发现我要么不理解,因为我是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,因为它不漂亮:)。

感谢大家的帮助!

谢谢,

2 个答案:

答案 0 :(得分:1)

这是部分查询

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

您只需要在WITH子句中插入连接查询,并添加用于对记录进行分区的额外列。

答案 1 :(得分: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; 

DEMO

结果:

COMPANYIDTICKETID   COMPANYCOMPANYID    STEPCOMPANYCOMPANYID    STEPCOMPANYSTEPORDER
210425          0BAD0261            0BAD0261                    2
136211          10B7E005            10B7E005                    3
155585          3A2078C5            3A2078C5                    2
193256          95AC74FB            95AC74FB                    2