我正在尝试使用和学习分区依据来返回一对多关系的最大步数。 基本上,我有一个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,因为它不漂亮:)。
感谢大家的帮助!
谢谢,
答案 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;
结果:
COMPANYIDTICKETID COMPANYCOMPANYID STEPCOMPANYCOMPANYID STEPCOMPANYSTEPORDER
210425 0BAD0261 0BAD0261 2
136211 10B7E005 10B7E005 3
155585 3A2078C5 3A2078C5 2
193256 95AC74FB 95AC74FB 2