繁体   English   中英

选择多行的最新行值

[英]Select latest row value for multiple rows

请看下面的sql小提琴。

http://sqlfiddle.com/#!6/26b91/1

最新的SQL小提琴在这里

我将尝试描述我首先需要的输出。 我期望有两行,因为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

我敢肯定我明天会上班,但是那件事还是行不通的:(

对于每个BatchCodePullPointDate我们期待从一排PullPoint具有最大AuditNumber使用CROSS APPLY 这是SQL Fiddle 我使用您的http://sqlfiddle.com/#!6/b1e79/2作为样本数据的来源。

还不清楚您是否也需要在StudyCodeStudyCode两个表。 如果有必要,只需将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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM