`

T-SQL查询学习笔记——分组因子的使用示例

阅读更多
IF OBJECT_ID('Stocks') IS NOT NULL
  DROP TABLE Stocks;
GO

CREATE TABLE dbo.Stocks
(
  dt    DATETIME NOT NULL PRIMARY KEY,
  price INT      NOT NULL
);

INSERT INTO dbo.Stocks(dt, price) VALUES('20060801', 13);
INSERT INTO dbo.Stocks(dt, price) VALUES('20060802', 14);
INSERT INTO dbo.Stocks(dt, price) VALUES('20060803', 17);
INSERT INTO dbo.Stocks(dt, price) VALUES('20060804', 40);
INSERT INTO dbo.Stocks(dt, price) VALUES('20060805', 40);
INSERT INTO dbo.Stocks(dt, price) VALUES('20060806', 52);
INSERT INTO dbo.Stocks(dt, price) VALUES('20060807', 56);
INSERT INTO dbo.Stocks(dt, price) VALUES('20060808', 60);
INSERT INTO dbo.Stocks(dt, price) VALUES('20060809', 70);
INSERT INTO dbo.Stocks(dt, price) VALUES('20060810', 30);
INSERT INTO dbo.Stocks(dt, price) VALUES('20060811', 29);
INSERT INTO dbo.Stocks(dt, price) VALUES('20060812', 29);
INSERT INTO dbo.Stocks(dt, price) VALUES('20060813', 40);
INSERT INTO dbo.Stocks(dt, price) VALUES('20060814', 45);
INSERT INTO dbo.Stocks(dt, price) VALUES('20060815', 60);
INSERT INTO dbo.Stocks(dt, price) VALUES('20060816', 60);
INSERT INTO dbo.Stocks(dt, price) VALUES('20060817', 55);
INSERT INTO dbo.Stocks(dt, price) VALUES('20060818', 60);
INSERT INTO dbo.Stocks(dt, price) VALUES('20060819', 60);
INSERT INTO dbo.Stocks(dt, price) VALUES('20060820', 15);
INSERT INTO dbo.Stocks(dt, price) VALUES('20060821', 20);
INSERT INTO dbo.Stocks(dt, price) VALUES('20060822', 30);
INSERT INTO dbo.Stocks(dt, price) VALUES('20060823', 40);
INSERT INTO dbo.Stocks(dt, price) VALUES('20060824', 20);
INSERT INTO dbo.Stocks(dt, price) VALUES('20060825', 60);
INSERT INTO dbo.Stocks(dt, price) VALUES('20060826', 60);
INSERT INTO dbo.Stocks(dt, price) VALUES('20060827', 70);
INSERT INTO dbo.Stocks(dt, price) VALUES('20060828', 70);
INSERT INTO dbo.Stocks(dt, price) VALUES('20060829', 40);
INSERT INTO dbo.Stocks(dt, price) VALUES('20060830', 30);
INSERT INTO dbo.Stocks(dt, price) VALUES('20060831', 10);

需求:找出股票价格大于或等于50的连续周期

解决方案:
方案一、子查询
SELECT MIN(dt) AS startrange, MAX(dt) AS endrange,
  DATEDIFF(day, MIN(dt), MAX(dt)) + 1 AS numdays,
  MAX(price) AS maxprice
FROM (SELECT dt, price,
        (SELECT MIN(dt)
         FROM dbo.Stocks AS S2
         WHERE S2.dt > S1.dt
          AND price < 50) AS grp
      FROM dbo.Stocks AS S1
      WHERE price >= 50) AS D
GROUP BY grp;

方案二、ROW_NUMBER函数:
SELECT MIN(dt) AS startrange, MAX(dt) AS endrange,
  DATEDIFF(day, MIN(dt), MAX(dt)) + 1 AS numdays,
  MAX(price) AS maxprice
FROM (SELECT dt, price,
        dt - ROW_NUMBER() OVER(ORDER BY dt) AS grp
      FROM dbo.Stocks AS S1
      WHERE price >= 50) AS D
GROUP BY grp;
GO
分享到:
评论

相关推荐

    Microsoft SQL Server 2005技术内幕:T-SQL查询的源代码

    在《Microsoft SQL Server 2005技术内幕:T-SQL查询的源代码》中,读者将深入学习这些概念,并通过实际的脚本示例了解如何在SQL Server 2005中应用它们。书中的源代码文件“TSQL_Querying_20061113”很可能包含了一...

    Microsoft_SQL_Server_2005技术内幕:T-SQL查询.pdf

    它详细介绍了T-SQL的内部体系结构,包含了非常全面的编程参考,提供了使用Transact-SQL(T-SQL)的专家级指导,囊括了非常全面的编程参考,揭示了基于集合的查询的强大威力,并包含大量来自专家们的参考和建议。...

    sql server 2012 T-SQl基础教程 源码和示例数据库

    《SQL Server 2012 T-SQL基础教程——源码与示例数据库》 本教程专注于Microsoft SQL Server 2012中的Transact-SQL(T-SQL)语言,这是SQL Server的主要查询语言,用于数据操作、查询、存储过程和数据库对象的编程...

    Sql2008技术内幕-T-Sql查询

    《SQL2008技术内幕——T-SQL查询》是一本深入探讨Microsoft SQL Server 2008数据库管理系统中T-SQL(Transact-SQL)查询的权威指南。T-SQL是SQL Server的核心语言,用于数据操作、存储过程编写、触发器定义以及...

    T-SQL示例大全(全是T-SQL语句 )

    T-SQL,全称Transact-SQL,是SQL语言的一个扩展,主要用于Microsoft SQL Server数据库管理系统。它是数据库查询、数据更新、事务...通过学习和实践这些示例,你可以深入了解T-SQL的强大功能,并提升数据库管理技能。

    SQL SERVER 2005技术内幕:T-SQL查询

    《SQL SERVER 2005技术内幕:T-SQL查询》是数据库开发人员不可或缺的一本指南,它深入探讨了SQL Server 2005中的Transact-SQL(T-SQL)查询技术。这本书以其详尽的解释和实用的示例,帮助读者掌握T-SQL查询的精髓,...

    T-SQL示例大全,一个很不错的SQL示例,更快速掌握SQL,推荐使用。

    通过深入学习和实践这些T-SQL示例,可以有效提升SQL技能,无论是在数据库管理、数据查询,还是在开发数据库驱动的应用程序时,都将更加得心应手。建议逐步学习每个示例,并尝试将它们应用到实际问题中,以加深理解和...

    T-SQL Querying 源代码

    本书及其续篇——《Microsoft SQL Server 2005技术内幕:T-SQL程序设计》介绍了SQL Server 2005中高级T-SQL查询、查询优化及编程相关的知识。这两本书侧重于解决实践中的常见问题,并讨论了解决这些问题的方法。它们...

    SQL SERVER 2008 技术内幕 T-SQL查询 英文版

    ### SQL Server 2008 技术内幕:T-SQL...总之,《SQL Server 2008 技术内幕:T-SQL查询》为读者提供了一个系统学习SQL Server 2008中T-SQL查询技术的机会,无论是在理论知识方面还是实践操作层面都有着极其重要的价值。

    Microsoft SQL Server 2005技术内幕:T-SQL查询 pdf 中文版 2

    Microsoft SQL Server 2005技术内幕:T-SQL查询 pdf 中文版 第二部分 第一部分地址:http://download.csdn.net/source/2684220

    T-SQL示例大全.rar_sql_t-sql_windows sql

    《T-SQL示例大全》是一个综合性的资源集合,涵盖了SQL语言中的Transact-SQL(T-SQL)的大量实例,适用于在Windows环境下使用SQL Server数据库管理系统进行开发和管理的人员。T-SQL是Microsoft SQL Server所扩展的...

    T-sql帮助文档

    **T-SQL(Transact-SQL)是微软SQL Server...学习和熟练掌握T-SQL是成为高效SQL Server数据库管理员或开发者的必要条件。通过深入研究提供的帮助文档,你可以了解所有T-SQL的关键概念,提升你的数据库管理和编程技能。

    2008技术内幕:T-SQL查询源代码

    《2008技术内幕:T-SQL查询...总的来说,《2008技术内幕:T-SQL查询源代码》是一本深入探讨SQL Server T-SQL查询的宝贵资源,通过系统学习,读者将能够编写出更加高效、可维护的数据库查询,提升数据库系统的整体性能。

    sql server 2005 技术内幕 T-SQL查询 中文清晰pdf part4

    学习sql server 和sql 的两本经典的著作: 《sql server 2005 技术内幕 T-SQL查询》 《sql server 2005 技术内幕 T-SQL程序设计》 网上大多的资源都是英文的,好容易找到中文的了,上传上来和大家分享。 这两本书都...

    sqlserver-T-sql示例

    T-sql基本语法示例 1.建库建表,建约束 2.查询 3.视图 4.存储过程 5.触发器

    Microsoft SQL Server 2008技术内幕:T-SQL语言基础 示例数据库

    Microsoft SQL Server 2008技术内幕:T-SQL语言基础的示例数据库无法再国外的网址上下载,这个是已经下载好的

    T-SQL入门资料

    T-SQL不仅仅是简单的查询语言,它包含了如SELECT和UPDATE这样的语句,还是一个成熟的编程语言,允许程序员以非常强大的方式使用SQL Server。T-SQL允许用户编写存储过程在数据库内执行、集中业务逻辑在数据库中,并且...

    SQL Server2005 T-SQL 概述

    ### SQL Server 2005 T-SQL 概览与逻辑查询处理深度解析 #### T-SQL基础与增强功能 T-SQL(Transact-SQL)是Microsoft SQL Server特有的一种SQL方言,用于管理和操作数据库。SQL Server 2005版本对T-SQL进行了显著...

    [T-SQL.2008.入门].Beginning.T-SQL.2008.pdf

    通过这些内容的学习,读者将能够熟练地使用T-SQL来解决实际问题,提升SQL Server数据库管理与开发的技能。记住,实践是检验学习效果的最佳方式,完成书中的练习并不断试验,将是掌握T-SQL的捷径。

Global site tag (gtag.js) - Google Analytics