濮阳杆衣贸易有限公司

主頁 > 知識(shí)庫 > SQLServer 2008 R2中使用Cross apply統(tǒng)計(jì)最新數(shù)據(jù)和最近數(shù)據(jù)

SQLServer 2008 R2中使用Cross apply統(tǒng)計(jì)最新數(shù)據(jù)和最近數(shù)據(jù)

熱門標(biāo)簽:智能語音外呼系統(tǒng)打電話 電銷外呼系統(tǒng)違規(guī) 寧夏外呼系統(tǒng)方案 400電話怎么申請收費(fèi)標(biāo)準(zhǔn) 高德地圖標(biāo)注生成 南京外呼系統(tǒng)租用 怎樣在地圖標(biāo)注自己的信息 濟(jì)南電銷外呼防封卡怎么樣 400電話辦理2273649Z空間

使用 APPLY 運(yùn)算符可以為實(shí)現(xiàn)查詢操作的外部表表達(dá)式返回的每個(gè)行調(diào)用表值函數(shù)。表值函數(shù)作為右輸入,外部表表達(dá)式作為左輸入。通過對右輸入求值來獲得左輸入每一行的計(jì)算結(jié)果,生成的行被組合起來作為最終輸出。APPLY 運(yùn)算符生成的列的列表是左輸入中的列集,后跟右輸入返回的列的列表。

注意:若要使用 APPLY,數(shù)據(jù)庫兼容級別必須至少為 90。

APPLY 有兩種形式:CROSS APPLY 和 OUTER APPLY。CROSS APPLY 僅返回外部表中通過表值函數(shù)生成結(jié)果集的行。OUTER APPLY 既返回生成結(jié)果集的行,也返回不生成結(jié)果集的行,其中表值函數(shù)生成的列中的值為 NULL。

好久沒寫SQL了,手都有點(diǎn)生了。哈哈,今天回答個(gè)問題。順便記錄下來。

事主的需求

事主的問題應(yīng)該是想把最新的數(shù)據(jù)和次新數(shù)據(jù)放在一行里顯示。

因?yàn)闆]有說明重復(fù)的情況如何處理,即有多個(gè)最新數(shù)據(jù)或者有多個(gè)次新數(shù)據(jù),所以我沒有做過多的處理。

--by wls
--
--網(wǎng)絡(luò)代碼有風(fēng)險(xiǎn)
--復(fù)制粘貼須謹(jǐn)慎
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 

運(yùn)行的結(jié)果應(yīng)該是正確的。

但是看執(zhí)行計(jì)劃,不是很好啊。

有空再改改。

你可以嘗試一下這個(gè),看看是什么結(jié)果。

產(chǎn)生這種原因是因?yàn)槟銢]有做出具體規(guī)定。

--by wls
--
--網(wǎng)絡(luò)代碼有風(fēng)險(xiǎn)
--復(fù)制粘貼須謹(jǐn)慎
------------------------------------------------------------------------
--你可以嘗試一下這個(gè),看看是什么結(jié)果。
--產(chǎn)生這種原因是因?yàn)闆]有做出具體規(guī)定。
------------------------------------------------------------------------
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

以上內(nèi)容是小編給大家介紹的SQLServer 2008 R2中使用Cross apply統(tǒng)計(jì)最新數(shù)據(jù)和最近數(shù)據(jù)的相關(guān)知識(shí),希望對大家有所幫助!

您可能感興趣的文章:
  • 圖文詳解SQL Server 2008R2使用教程
  • win2008 r2 服務(wù)器php+mysql+sqlserver2008運(yùn)行環(huán)境配置(從安裝、優(yōu)化、安全等)
  • SqlServer2008誤操作數(shù)據(jù)(delete或者update)后恢復(fù)數(shù)據(jù)的方法
  • 圖文詳解Windows Server2012 R2中安裝SQL Server2008
  • sql Server 2008 R2還原或刪除數(shù)據(jù)庫時(shí)總是出錯(cuò)的解決方法
  • SQL Server 2008 r2 完全卸載方法分享
  • SQL Server 2008 R2 超詳細(xì)安裝圖文教程
  • 設(shè)置sql server 2008 r2的身份驗(yàn)證模式的圖文教程

標(biāo)簽:仙桃 唐山 平頂山 惠州 長白山 貴港 茂名 潛江

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《SQLServer 2008 R2中使用Cross apply統(tǒng)計(jì)最新數(shù)據(jù)和最近數(shù)據(jù)》,本文關(guān)鍵詞  SQLServer,2008,中,使用,Cross,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《SQLServer 2008 R2中使用Cross apply統(tǒng)計(jì)最新數(shù)據(jù)和最近數(shù)據(jù)》相關(guān)的同類信息!
  • 本頁收集關(guān)于SQLServer 2008 R2中使用Cross apply統(tǒng)計(jì)最新數(shù)據(jù)和最近數(shù)據(jù)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    城步| 兴文县| 哈巴河县| 尼勒克县| 谢通门县| 宝丰县| 宁乡县| 宁国市| 沈阳市| 特克斯县| 江陵县| 托克逊县| 凤凰县| 德令哈市| 湘阴县| 夹江县| 平谷区| 朔州市| 达拉特旗| 红安县| 五华县| 荔波县| 罗甸县| 重庆市| 陇西县| 堆龙德庆县| 沈丘县| 泽普县| 建昌县| 平遥县| 咸丰县| 通河县| 南阳市| 渑池县| 吴江市| 嘉兴市| 屏东市| 宁波市| 昌吉市| 合水县| 托里县|