有两个导数据的需求,
1、一张表里面每一个订单号可能对应多条数据,每个单号返回时间最早的那条。

2、根据条件查询某个字段并按照逗号,合并在一起。

表类似结构如下:

第一条sql:
select c.Id,c.OrderNum, c.CreateTime FROM (select t.*,row_number() over(partition by t.OrderNum order by t.CreateTime ) rn  from Payinfo t WHERE t.OrderNum IN('20160906025229','20160905006031','20160905016570')) c WHERE rn = 1;

执行效果如下:


主要知识点:over partition by
over partition  by关键字是分析性函数的一部分,它和聚合函数不同的地方在于它能返回一个分组中的多条记录,常用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组 。

Group by 与 over partition by都可以实现分组统计功能.

Group by 根据一列或者多列的值或表达式将选定的行进行一个摘要分组,每一个分组只返回一行。

第二条sql:

SELECT TOP 1  data=STUFF((SELECT ','+ CAST(id AS VARCHAR(10))  FROM Payinfo t WHERE OrderNum IN('20160906025229','20160905006031')  FOR XML PATH('')), 1, 1, '')
FROM Payinfo t1

执行效果如下:

主要知识点:FOR XML PATH
将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作。

有关FOR XML PATH更多知识,我觉得下面这篇文章讲的很好:
灵活运用 SQL SERVER FOR XML PATH

Sql:多行合并一行以及多条数据取时间最早的那条的更多相关文章

  1. SQL 多行合并一行

    select stuff((select ',' + CONVERT(VARCHAR(50),id)+'' from tab_menu  group by id for xml  path('')), ...

  2. SQL实现多行合并一行 .

    ORACLE纯SQL实现多行合并一行[转] 项目中遇到一个需求,需要将多行合并为一行.表结构如下:NAME                            Null           Type ...

  3. sql 多行合一行

    sql多行合并成一行 sql server SELECT [activityId], --STUFF( (SELECT ',' + Cast(A.phone AS varchar) FROM aaa ...

  4. sql 查询某个条件多条数据中最新的一条数据或最老的一条数据

    sql 查询某个条件下多条数据中最新的一条数据或最老的一条数据 test_user表结构如下: 需求:查询李四.王五.李二创建的最初时间或者最新时间 1:查询最初的创建时间: SELECT * FRO ...

  5. 一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 MySQL 数据库,又插入了一条数据,此时 id 是几?如何获取当前数据库版本?

    一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 MySQL 数据库,又插入了一条数据,此时 id 是几? 一般情况下,我们创建的表的类型是InnoDB,如果新增一条记录(不重启mysq ...

  6. ORACLE纯SQL实现多行合并一行

    项目中遇到一个需求,需要将多行合并为一行.表结构如下:NAME                            Null           Type---------------------- ...

  7. sql多行合并成一行用逗号隔开,多表联合查询中子查询取名可重复

    简单版的 SELECT a.CreateBy,Name =stuff((select ','+Name FROM SG_Client WHERE CreateBy = a.CreateBy for x ...

  8. sql server 多行合并一行

    1. 使用函数 go CREATE FUNCTION dbo.fn_Sumtype(@type varchar(50))RETURNS varchar(8000)ASBEGIN DECLARE @va ...

  9. Oracle 多行合并一行 方法

    假如有如下表,其中各个i值对应的行数是不定的 SQL> select * from t; I A          D ---------- ---------- --------------- ...

随机推荐

  1. Excel 数据关联

    =INDEX(Sheet2!$A$2:$A$77,MATCH(A4,Sheet2!$C$2:$C$77,0))

  2. android HAL 教程(含实例)

    http://www.cnblogs.com/armlinux/archive/2012/01/14/2396768.html Android Hal 分析                       ...

  3. tomcat部署web项目的3中方法

    1.直接把项目复制到Tomcat安装目录的webapps目录中,这是最简单的一种Tomcat项目部署的方法,也是初学者最常用的方法. 2.在tomcat安装目录中有一个conf文件夹,打开此文件夹,其 ...

  4. 微信小程序-基础内容组件

    icon 图标 示例: <view class="group"> <block wx:for="{{iconSize}}"> <i ...

  5. Python控制window进行简单的消息弹窗

    有人提到可以用easygui 稍后尝试一下

  6. MySQL初始配置

    mysql初始密码在/var/log/mysqld.log中 ,搜索:temporary password #mysql -uroot -p 登录mysql MYSQL密码策略有3级(0,1,2)默认 ...

  7. linux下关掉teamviewer服务

    一.情景介绍 OS: ubuntu14.04 64bit teamviewer版本:10.0.36281 刚才看见已经关掉了teamviewer,但是通过ps看以下进程情况,却还存在该进程,于是: 二 ...

  8. 【转】Unix NetWork Programming——环境搭建(解决unp.h等源码编译问题)

    下面开始用简单但典型的客户端和服务器端程序说明如何进行网络编程.这一小节讲的是客户端,一个用来连接并读取服务器发送来的时间的客户端. 这里涉及到了编写代码,因此要 搭建unix网络编程环境 unix系 ...

  9. 采用dom4j和反射模拟Spring框架的依赖注入功能

    Spring的依赖注入是指将对象的创建权交给Spring框架,将对象所依赖的属性注入进来的行为.在学习了dom4j后,其实也可以利用dom4j和反射做一个小Demo模拟Spring框架的这种功能.下面 ...

  10. javascript高级编程3第二章:在html中使用javascript

    2.1 <script>元素 向html页面中插入javascript的主要方法,就是使用<script>元素.这个元素被加入到正式的html规范中.html4.01为< ...