正文

SQLServer 2008 R2中使用Cross apply统计最新数据和最近数据(sqlserver2008介绍)这都可以

文章摘要

这篇文章介绍了如何在SQL中使用WITH子查询生成临时表,并通过此临时表生成具有降序排名的行。文章详细解释了如何在PName和PSId字段上按ChkDate进行排序,并使用DENSE_RANK()函数生成DRID,用于同一业务单元内的降序排名。同时,使用ROW_NUMBER()生成RID,用于整个业务单元内的行号。文章还展示了如何在后续查询中通过CROSS APPLY关联这些排名结果,并结合WHERE语句进行进一步筛选或处理。整体内容围绕如何通过复杂的SQL操作实现数据的有序排列和精确管理。

 –by wls — –网络代码有风险 –复制粘贴须谨慎 ———————————————————————— –你可以尝试一下这个,看看是什么结果。 –产生这种原因是因为没有做出具体规定。 ———————————————————————— USE tempdb GO IF OBJECT_ID(‘t_TestbyWLS’,’U’) IS NOT NULL DROP TABLE t_TestbyWLS GO CREATE TABLE t_TestbyWLS(PName NVARCHAR(),PSId INTEGER,ChkDate NVARCHAR(),Price FLOAT) GO INSERT INTO t_TestbyWLS VALUES (‘A’,,”,.) ,(‘B’,,”,.) ,(‘B’,,”,.) ,(‘A’,,”,.) ,(‘B’,,”,.) ,(‘A’,,”,.) ,(‘A’,,”,.) GO WITH TempChkDate AS ( SELECT PName,PSId,ChkDate,Price,DENSE_RANK() OVER(PARTITION BY PName ORDER BY CAST(Chkdate AS INTEGER) DESC ) AS DRID, ROW_NUMBER() OVER(PARTITION BY PName ORDER BY CAST(Chkdate AS INTEGER) DESC,Price DESC ) AS RID FROM t_TestbyWLS ) SELECT tcd.PName,tcd.PSID,tcd.ChkDate,tcd.Price,tcd.DRID,tcd.RID,t.tcd,t.tp FROM TempChkDate AS tcd CROSS APPLY(SELECT ChkDate AS tcd, Price AS tp FROM TempChkDate WHERE –tcd.DRID=AND tcd.PName=TempChkDate.PName AND tcd.PSId=TempChkDate.PSId AND TempChkDate.Drid=) AS t WHERE tcd.DRID=GO