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统计最新数据和最近数据的相关知识,希望对大家有所帮助!

(0)

相关推荐

  • 图文详解Windows Server2012 R2中安装SQL Server2008

    入手一台Windows Server2012云服务器,搭建一下服务环境,选用SQL Server2008 直奔主题,下好安装镜像后,直接双击 选择运行程序而不获取帮助 如图: 进入安装中心后选择 安装 再选择全新安装 同样选择运行程序而不获取帮助 选择后如图: 程序会检测一下系统,没警告等大问题就可以点确定 输入产品秘钥,也可以选择试用版本:试用版本简直不能忍,我直接上秘钥,关于秘钥我会在最下面给出一个方案 接受条款,下一步 点安装即可 软件又检测一遍,没有警告就可以点下一步 选择第一项即可 你

  • 图文详解SQL Server 2008R2使用教程

    本文为大家分享了SQL Server 2008R2简单使用教程,供大家参考,具体内容如下 1 首先找到开始菜单中相关内容:如下图:安装的组件不同可能有所不同:我的电脑中包括如下项: 商业智能:管理控制台:导入和导出数据:分析服务:集成服务:配置工具:文档和教程:性能工具: 因为偶装的组件多: 2 进入管理控制台 首先是登录:服务器类型选择 数据库引擎:此处先用Windows身份验证登录: 3 进入管理控制台 界面如下:看到 数据库 下有四个子项,系统数据库.数据库快照.ReportServer.

  • SqlServer2008误操作数据(delete或者update)后恢复数据的方法

    实际工作中,有时会直接在数据库中操作数据,比如对数据进行delete或者update操作,当进行这些操作的时候,如果没有加上 where条件或者where条件不合理,那么导致的结果可想而知,如果操作的又是线上数据库,那么这个后果将会非常严重. 当事情发生后,我们要想办法补救,针对于sqlserver2005数据库,有个很出名的工具Log Exploer.具体操作使用大家可以自行搜索;针对于sqlserver2008也有这样的工具,但是大多是需要付费的...我们尝试用 sqlserver的事务日志

  • win2008 r2 服务器php+mysql+sqlserver2008运行环境配置(从安装、优化、安全等)

    win2008 r2 安装 http://www.jb51.net/article/38048.htm iis的安装 http://www.jb51.net/article/86390.htm php的安装注意事项: 下载非安全线程 版本 nts php 5.2.17 http://www.jb51.net/softs/268745.html 其它版本可以到 http://museum.php.net/php5/里面很多经典的老版本. PHP 5.5 (5.5.36) VC11 x64 Non

  • sql Server 2008 R2还原或删除数据库时总是出错的解决方法

    我们在还原或删除Windows Server 2008 R2数据库时经常出现因为数据库正在使用,所以无法获得对数据库的独占访问权等错误,非常烦恼,今天就教大家一招终极解决方法. 只需要新建一个查询,在里面执行下面代码即可: 复制代码 代码如下: ALTER DATABASE 你的数据库名称 SET OFFLINE WITH ROLLBACK IMMEDIATE ALTER DATABASE 你的数据库名称 SET OnLINE

  • SQL Server 2008 r2 完全卸载方法分享

    "五一"时进行了系统重装,在没有卸载SQL Server 2008情况下尝试安装SQL Server 2008r2 ,安装提示成功但提示出现几个错误,发现没有找到SSMS,以及在SQL SERVER配置管理器里的服务也只有可怜的一项,瞬间感觉不妙,没办法只能重新卸载安装,在网上无绪找到了几个介绍卸载方法的文档,看似卸载完了,可但自己再安装的时候又出现了问题,出现了SSMS但配置管理器服务也只有一项,这种情况SSMS是连接不了服务器的,我就这样利用课余时间自己搜索瞎折腾了几天,有点快要崩

  • 设置sql server 2008 r2的身份验证模式的图文教程

    我在安装sql server2008R2的时候,选择了Windows身份验证模式,现在想把它改为sql server验证模式,怎么修改呢?其实方法步骤很简单,下面小编给大家分享修改方法. 方法如下所示: 1.先通过windows身份验证模式登录 2.选中服务器,右键属性,点击属性 3. 4. 以上所述是小编给大家介绍的设置sql server 2008 r2的身份验证模式的图文教程,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的.在此也非常感谢大家对我们网站的支持!

  • SQL Server 2008 R2 超详细安装图文教程

    一.下载SQL Server 2008 R2安装文件 cn_sql_server_2008_r2_enterprise_x86_x64_ia64_dvd_522233.iso 二.将安装文件刻录成光盘或者用虚拟光驱加载,或者直接解压,打开安装文件,出现下面的界面 安装SQL Server 2008 R2需要.NET Framework 3.5 SP1支持 这里我们的操作系统是Windows Server 2008 R2,已经默认自带了.NET Framework 3.5 SP1 直接点确定 选择

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

    使用 APPLY 运算符可以为实现查询操作的外部表表达式返回的每个行调用表值函数.表值函数作为右输入,外部表表达式作为左输入.通过对右输入求值来获得左输入每一行的计算结果,生成的行被组合起来作为最终输出.APPLY 运算符生成的列的列表是左输入中的列集,后跟右输入返回的列的列表. 注意:若要使用 APPLY,数据库兼容级别必须至少为 90. APPLY 有两种形式:CROSS APPLY 和 OUTER APPLY.CROSS APPLY 仅返回外部表中通过表值函数生成结果集的行.OUTER A

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

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

  • windows server 2008 R2中IIS FTP安装部署图文教程

    windows server 2008 R2中IIS FTP安装部署教程,供大家参考,具体内容如下 1.登陆系统,进入开始——>管理工具——>服务器管理 2.选中“角色”——>“ 添加角色” 3.在“添加角色向导”中操作 注:在这里会等待1到5分钟不等. 添加角色完毕. 4. 进入IIS界面 1) 服务器管理器——>角色——>web服务器(IIS)——>Internet 信息服务(IIS),点击进入 2) 开始——>管理工具——>Internet 信息服务(

  • PowerShell管理Win Server 2008 R2

    Windows PowerShell是一种专门为系统管理而设计的命令行界面和脚本语言.Windows PowerShell构建在Microsoft .NET Framework之上,可帮助IT专业人士自动控制Windows(R)操作系统以及管理Windows上运行的应用程序. Windows PowerShell命令(称为cmdlet)允许从命令行管理企业中的计算机.通过Windows PowerShell提供程序,可以像访问文件系统那样方便地访问数据存储,如注册表和证书存储. 在Windows

  • Windows Server 2008 R2上部署Exchange Server 2010图文教程

    这两个产品可谓是09年下半年微软推出的重头产品,均为64位架构,而且其功能和性能远远超出了其早期版本,在此不再对这方面的内容做过多的描述. Windows Server 2008 R2和Exchange Server 2010的结合是"完美"的.对于Exchange Server 2010的前一版本Exchange Server 2007来讲,只能运行在Windows Server 2008操作平台上,因此,想要在Windows Server 2008 R2部署Exchange 看来只

  • SQL Server 2008 R2 应用及多服务器管理

    SQL Server 2008 R2推出了管理SQL服务器数据库引擎的多个实例的SQL服务器工具,使用这些工具可以通过中央服务器对多个SQL Server服务器进行快速.高效的管理. 管理SQL引擎多实例的工具 使用SQL Server Management Studio中的工具浏览器可以把现有的SQL Server 2008 R2数据层应用程序和数据库引擎实例加入到SQL服务器工具中进行集中的管理. 另外还推出了一个称作数据层应用(DAC)的管理单元,这个管理单元提供了用于管理SQL服务器工具

  • win2008 R2中安装MySQL出现ODBC连接器安装错误

    我今天打算在Windows server 2008 R2中安装MySQL,可是总是发现ODBC连接器安装错误,无论我采用MySQL的整体安装包,还是单独的ODBC连接器安装文件!! 最后上网搜索了很久,终于解决了这个问题! 操作系统:Windows server 2008 R2 MySQL安装文件:mysql-installer-community-5.6.24.0.msi 为什么选择上面这个MySQL安装文件,这是一个能够安装全部需要的MySQL文件的安装包,能够帮助我们快速安装MySQL.

  • WINDOWS 2008 r2 远程桌面账户登录限制(一个帐户两个人使用)

    在WINDOWS 2008 R2中,一个帐户是只能默认开启一个远程登录会话,如果想修改这个限制需要按下面的步骤操作: 解决方法:开始-管理工具-远程桌面服务-远程桌面会话主机配置 双击编辑设置下面的"限制每个用户只能进行一个会话",打开之后切换到常规选项,把"限制每个用户只能进行一个会话"前面的勾取消掉. 最后,应用,确定. 开始--->管理工具--->远程桌面服务--->远程桌面会话主机配置 在"编辑设置"里面找到"

  • Win2008 R2中IIS7.5配置完网站权限不足问题的解决方法

    Windows Server 2008 R2中IIS7.5配置完网站权限不足问题的解决办法: 常见问题: HTTP 错误 500.0 - Internal Server Error无法显示页面,因为发生内部服务器错误. 模块 IsapiModule 通知 ExecuteRequestHandler 处理程序 AboMapperCustom-20607 错误代码 0x800700c1 请求的 URL http://localhost:80/index.php 物理路径 D:\wwwroot\777

  • Windows Server 2008 R2 负载平衡安装配置入门篇

    一.简单介绍负载均衡 负载均衡也称负载共享,它是指负载均衡是指通过对系统负载情况进行动态调整,把负荷分摊到多个操作节点上执行,以减少系统中因各个节点负载不均衡所造成的影响,从而提高系统的工作效率. 在常用的大型服务器系统当中都存在着负载均衡组件,常用的像微软的网络负载平衡NLB.甲骨文的Oracle RAC.思科的负载均衡(SLB),Apach+Tomcat 负载均衡,它们能从硬件或软件不同方面实现系统各节点的负载平衡,有效地提高大型服务器系统的运行效率,从而提升系统的吞吐量.本篇文章以微软的网

随机推荐