SQLServer 2008 R2中應用Cross apply統計最新數據和比來數據。本站提示廣大學習愛好者:(SQLServer 2008 R2中應用Cross apply統計最新數據和比來數據)文章只能為提供參考,不一定能成為您想要的結果。以下是SQLServer 2008 R2中應用Cross apply統計最新數據和比來數據正文
應用 APPLY 運算符可認為完成查詢操作的內部表表達式前往的每一個行挪用表值函數。表值函數作為右輸出,內部表表達式作為左輸出。經由過程對右輸出求值來取得左輸出每行的盤算成果,生成的行被組合起來作為終究輸入。APPLY 運算符生成的列的列表是左輸出中的列集,後跟右輸出前往的列的列表。
留意:若要應用 APPLY,數據庫兼容級別必需至多為 90。
APPLY 有兩種情勢:CROSS APPLY 和 OUTER APPLY。CROSS APPLY 僅前往內部表中經由過程表值函數生成成果集的行。OUTER APPLY 既前往生成成果集的行,也前往不生成成果集的行,個中表值函數生成的列中的值為 NULL。
很久沒寫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 SELECT * FROM t_TestbyWLS GO /* 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 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
運轉的成果應當是准確的。
然則看履行籌劃,不是很好啊。
有空再改改。
你可以測驗考試一下這個,看看是甚麼成果。
發生這類緣由是由於你沒有做出詳細劃定。
--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
以上內容是小編給年夜家引見的SQLServer 2008 R2中應用Cross apply統計最新數據和比來數據的相干常識,願望對年夜家有所贊助!