校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > SQLServer 2008 R2中使用Cross apply統計最新數據和最近數據

SQLServer 2008 R2中使用Cross apply統計最新數據和最近數據

熱門標簽:智能語音外呼系統打電話 電銷外呼系統違規 寧夏外呼系統方案 400電話怎么申請收費標準 高德地圖標注生成 南京外呼系統租用 怎樣在地圖標注自己的信息 濟南電銷外呼防封卡怎么樣 400電話辦理2273649Z空間

使用 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統計最新數據和最近數據的相關知識,希望對大家有所幫助!

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

標簽:仙桃 唐山 平頂山 惠州 長白山 貴港 茂名 潛江

巨人網絡通訊聲明:本文標題《SQLServer 2008 R2中使用Cross apply統計最新數據和最近數據》,本文關鍵詞  SQLServer,2008,中,使用,Cross,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《SQLServer 2008 R2中使用Cross apply統計最新數據和最近數據》相關的同類信息!
  • 本頁收集關于SQLServer 2008 R2中使用Cross apply統計最新數據和最近數據的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 西乡县| 红原县| 珲春市| 万全县| 原平市| 繁昌县| 南乐县| 黄陵县| 凤阳县| 同仁县| 南平市| 芮城县| 湟源县| 临洮县| 财经| 纳雍县| 邯郸市| 彰武县| 池州市| 泰安市| 深圳市| 治县。| 临邑县| 成武县| 龙井市| 桑日县| 洛宁县| 个旧市| 凌云县| 龙游县| 宽甸| 中牟县| 花莲市| 溆浦县| 横山县| 龙南县| 稷山县| 察哈| 濮阳市| 广安市| 灵山县|