[英]Select latest row value for multiple rows
请看下面的sql小提琴。
http://sqlfiddle.com/#!6/26b91/1
我将尝试描述我首先需要的输出。 我期望有两行,因为PullPointDate
表中有两个条件。 PullPoint
表中存在多行是由于审核数据所致,条件1的审核值从1到3,条件2的审核值从1到2。您可以看到,可能存在许多审核。数据。 完整数据集中的其他列显然正在发生变化,但是由于它们不相关,因此在此未将其包括在内。 不用说,它们可能是(n)个条件和相关的拉点审计变更数据。
列
CondNumber, StudyCode, PullPeriod, PullUnit
1 , SS3105 , 52 , Weeks
2 , SS3105 , 24 , Weeks
PullPoint
表中的其他行不应包含在结果中,因为它们的AuditNumber
比最新的AuditNumber
少,即AuditNumber
AuditNumber
。
我为此苦苦挣扎了一段时间。 我的思维很难以固定的方式思考。 嵌套的Row_Over,Partition By等让我大汗淋漓。
我如何才能做到这一点,最接近的结果是一行看上去完美,而另一个值却为空,这是因为我在审计编号上执行了where子句,并且由于两个条件不同,所以仅返回了一行详细信息。
谢谢
我将尝试提供的更多信息。
这样做:
select distinct condNumber, pp.studycode, pullperiod, pullunit
from PullPoint pp
join PullPointDate ppd on ppd.studycode = pp.StudyCode
and pp.batchCode = ppd.batchcode
这似乎给了我我想要的...
选择o。*从拉点o
LEFT JOIN拉点b
ON o.studyCode = b.studyCode和o.batchCode = b.batchcode AND o.auditNumber <b.AuditNumber WHERE b.AuditNumber为NULL
我敢肯定我明天会上班,但是那件事还是行不通的:(
对于每个BatchCode
从PullPointDate
我们期待从一排PullPoint
具有最大AuditNumber
使用CROSS APPLY
。 这是SQL Fiddle 。 我使用您的http://sqlfiddle.com/#!6/b1e79/2作为样本数据的来源。
还不清楚您是否也需要在StudyCode
上StudyCode
两个表。 如果有必要,只需将AND PullPoint.StudyCode = CTE.StudyCode
添加到WHERE
条件。
WITH
CTE
AS
(
SELECT StudyCode, BatchCode, CondNumber
FROM PullPointDate
GROUP BY StudyCode, BatchCode, CondNumber
)
SELECT *
FROM
CTE
CROSS APPLY
(
SELECT TOP(1) PullPoint.PullUnit, PullPoint.PullPeriod
FROM PullPoint
WHERE PullPoint.BatchCode = CTE.BatchCode
ORDER BY PullPoint.AuditNumber DESC
) AS CA
;
除了弗拉基米尔·巴拉诺夫(Vladimir Baranov)的答案外,您还可以将CTE与Row_Number一起使用: SQLFiddler
WITH CTE
AS
(
SELECT ROW_NUMBER () OVER (PARTITION BY
P.BatchCode ORDER BY P.AuditNumber Desc) RN ,
P.StudyCode , P.BatchCode ,
PP.condNumber ,P.pullunit , P.PullPeriod
FROM pullpoint P
JOIN PullPointDate PP
ON P.BatchCode = PP.BatchCode
)
SELECT StudyCode ,
BatchCode ,
condNumber ,
pullunit ,
PullPeriod
FROM CTE
WHERE RN = 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.