Dev*_*per 1 sql sql-server sql-server-2008
我有来自Risk Table的最近和第二次最新数据表
表中的数据如下:
RiskID RiskName RiskScore RiskDate ItemID
1 ABC 10 23/10/2013 12
1 ABC 8 20/12/2013 12
1 ABC 5 15/01/2014 12
2 BC 9 19/09/2013 12
2 BC 10 17/12/2013 12
2 BC 9 12/01/2014 12
Run Code Online (Sandbox Code Playgroud)
我正在寻找下面的结果,其中ItemID应为12,RiskStatus应为"Open"
R_ID R_Name Recent_R_Date Recent_R_Score Second_R_Date Second_R_Date ItemID
1 ABC 15/01/2014 5 20/12/2013 8 12
2 BC 12/01/2014 9 17/12/2013 10 12
Run Code Online (Sandbox Code Playgroud)
寻找SQL大师的快速回复
这应该做:
;WITH CTE AS
(
SELECT *,
RN = ROW_NUMBER() OVER(PARTITION BY RiskID
ORDER BY RiskDate DESC)
FROM YourTable
)
SELECT RiskID AS R_ID,
RiskName AS R_Name,
MIN(CASE WHEN RN = 1 THEN RiskDate END) AS Recent_R_Date,
MIN(CASE WHEN RN = 1 THEN RiskScore END) AS Recent_R_Score,
MIN(CASE WHEN RN = 2 THEN RiskDate END) AS Second_R_Date,
MIN(CASE WHEN RN = 2 THEN RiskScore END) AS Second_R_Score
FROM CTE
GROUP BY RiskID,
RiskName;
Run Code Online (Sandbox Code Playgroud)
这是一个带有这个演示的sqlfiddle.结果是:
???????????????????????????????????????????????????????????????????????????????????
? R_ID ? R_NAME ? RECENT_R_DATE ? RECENT_R_SCORE ? SECOND_R_DATE ? SECOND_R_SCORE ?
???????????????????????????????????????????????????????????????????????????????????
? 1 ? ABC ? 23/10/2013 ? 10 ? 20/12/2013 ? 8 ?
? 2 ? BC ? 19/09/2013 ? 9 ? 17/12/2013 ? 10 ?
???????????????????????????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |