SQLServer 2008 R2中使用Cross apply统计最新数据和最近数据_mssql2008

使用 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_cross_apply
mssqlserver2008 r2、mssql server 2008 r2、mssql server 2012 r2、cross apply、cross apply的用法,以便于您获取更多的相关知识。

时间: 2024-09-20 00:50:27

SQLServer 2008 R2中使用Cross apply统计最新数据和最近数据_mssql2008的相关文章

sqlserver 2008 r2 开启AWE内存分配的问题

问题描述 sqlserver 2008 r2 开启AWE内存分配的问题 服务器是windows server 2003 8G内存,对数据库内存之类的基本都不懂,只是根据网上给的方法进行设置,但结果却懂. 如图,这是默认正常情况下的内存使用情况,sqlserver的内存到达1.7G的样子就不再上升了 但是当开启了AWE后,设置了最大内存为4000MB,但内存使用却一直维持在100多MB ,完全不懂原因,求解答 解决方案 这就对了.AWE内存SQL Server自己管理,不统计任务管理器中. 你在查

SqlServer 2008 R2定时备份数据库,并且发送邮件通知

原文:SqlServer 2008 R2定时备份数据库,并且发送邮件通知 先配置数据库的邮件设置,这样才可以发送邮件. 2. 3. 4. 5. 6. 7. 8. 9. 10. 总的预览图,如图   执行这一段(先发送备份邮件,然后进行数据备份,将昨天的发送数据插入到另一张表中,这样表中的数据也很小,查询也很快,充分利用数据库的表空间,进行拆表是一件提高查询和插入速度很快的一种方案) /******发送邮件通知******/ USE OpenMas GO DECLARE @mailContent

还原数据-SqlServer 2008 R2 全备+差备 数据库还原时报错,求助!!急!!

问题描述 SqlServer 2008 R2 全备+差备 数据库还原时报错,求助!!急!! 在对数据库进行还原的时候,我选了最近一次的全备与最新的一个差备进行还原,当选中这两个备份文件后,点确定之后提示 求帮助!求解决 解决方案 参考Sql server还原数据库提示"介质集有2个介质簇,但只..."的问题 检查一下备份的时候是不是有两个文件,但是还原的时候至指定了一个.

详解SQLServer 2008 R2数据库SSAS建模及扩展能力_mssql2008

SQLServer 2008 R2数据库中提供的SSAS建模工具包括包括SQL Server Management Studio 和Business Intelligence Development Studio,那么建模的过程是怎样的呢?本文我们就来介绍这些,接下来就让我们来一起了解一下SQLServer 2008 R2数据库的建模工具和关键过程以及数据挖掘.权限和访问接口等的知识吧. 建模工具和关键过程 SSAS的建模的目的是设计多维数据库对象,建模的工具包括SQL Server Manag

SQL Server Management Studio不能安装SQLServer 2008 R2的问题

环境 SQLServer 2008 R2 + Visual Studio 2010 + SQLManagementStudio_x86_CHS 问题描 述 编程开发难免会用到SQLServer或者VS2010,虽然现在很少做C/C++/C#的开发了.以前我安装SQLServer 2008 R2和Visual Studio 2010的顺序是这样的,先安装SQLServer 2008 R2,然后安装Visual Studio 2010, 这样是不会出现任何问题的.寒假心血来潮,偏偏我又是个叛逆心理很

数据库-64位sqlserver 2008 r2企业版可以安装在32位win7上吗

问题描述 64位sqlserver 2008 r2企业版可以安装在32位win7上吗 我的系统是win7的32位版本,可不可以装64位sqlserver 2008 r2企业版的数据库,如果不可以,可否提供32位sqlserver 2008 r2企业版的下载地址,感激不尽 解决方案 不可以.32bit操作系统只能安装32bit程序,反之,64bit系统可以安装32bit程序. 下载原版微软软件:http://msdn.itellyou.cn 解决方案二: 另外,SQL Server 2008 R2

操作-分高悬赏答案!!sql server 2008 r2中怎样存储txt文件?

问题描述 分高悬赏答案!!sql server 2008 r2中怎样存储txt文件? 客户要求将大量TXT文件原封不动存入sql数据库,使用pb开发程序,通过pb可以实现文件的下载和上传,目前的问题就是,怎么才能将txt文件存入数据库?有几种方法?那种方法最简单易实现?具体操作怎么来?分高悬赏 解决方案 简单得很,先用编辑软件把字段之间用ascii码的t分隔,也就是tab那个键按出来的空白. 然后复制到excel,数据就从文本变成了表格形式.然后excel里面有拼接函数 那就拼接成一个inser

java-JAVA链接sqlserver 2008 R2 出现用户sa登录失败

问题描述 JAVA链接sqlserver 2008 R2 出现用户sa登录失败 验证模式是windows和sqlserver身份验证,使用nacicat测试连接的时候也成功了,就是部署的时候 运行就报登录失败的错误,自己新建了个用户,测试成功之后,更换连接还是同样的错误 解决方案 还是给自己了 到最后没解决,换成别的了 解决方案二: 你的sql server需要混合验证,才能启用sa账户. 解决方案三: 我已经开启混合验证了

sqlserver 2008 r2 SqlClrProvider报错解析

环境: DB:SQLSERVER 2008 R2: WEB:windows server 2008 r2: 现象: 在WEB服务器端导出报表时,报错,如下:未能加载文件或程序集"Microsoft.SqlServer.SqlClrProvider, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" 分析: 该问题是因为WEB服务器缺少sharedManagementObjects导致,安装该组件即可.