Sqlserver取最近一分组中最新一条记录

/* 1 用子查询 可以过滤掉parentID为NULL的*/
select * from Bid_ProjectPackageAlteredDesignInfo t0
where exists
(
    select 1 from
    (
        select ParentID, max(AlterTime) as AlterTime
        from Bid_ProjectPackageAlteredDesignInfo
        group by ParentID
    ) x
    where x.ParentID = t0.ParentID and x.AlterTime = t0.AlterTime
)
select a.*
 from Bid_ProjectPackageAlteredDesignInfo a
 inner join
 (select ParentID,
         max(AlterTime) ‘AlterTime‘
  from Bid_ProjectPackageAlteredDesignInfo
  group by ParentID) b on a.ParentID=b.ParentID and a.AlterTime=b.AlterTime
 /*不可以过滤掉parentID为NULL的*/
select a.*
 from Bid_ProjectPackageAlteredDesignInfo a
 where not exists
 (
    select 1 from Bid_ProjectPackageAlteredDesignInfo b where b.ParentID=a.ParentID and b.AlterTime>a.AlterTime
  )

/* 2 用窗口函数 *//*不可以过滤掉parentID为NULL的*/
select * from
(
select ParentID,AlterTime
, max(AlterTime) over(partition by ParentID) as AlterTimeMax
from Bid_ProjectPackageAlteredDesignInfo
) x
where AlterTimeMax =AlterTime
时间: 2024-07-31 14:06:56

Sqlserver取最近一分组中最新一条记录的相关文章

php实现只保留mysql中最新1000条记录

这篇文章主要介绍了php实现只保留mysql中最新1000条记录的方法和相关示例及数据库结构,十分的全面,有需要的小伙伴可以参考下. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 <?php mysql_connect("localhost","root","root"); mysql_select_db("test"); //保留最新的1000条记录 $

MSSQL分组取后每一组的最新一条记录

数据库中二张表,用户表和奖金记录表,奖金记录表中一个用户有多条信息,有一个生效时间,现在要查询: 奖金生效时间在三天前,每个用户取最新一条奖金记录,且用户末锁定 以前用的方法是直接写在C#代码中的: for(所有末锁定用户) 查询奖金记录表 top 1 where uid=??? order by 生效时间 desc if(上面查询的记录生效时间在三天前) 输出 今天花了大部分时间研究了一下,终于找到一条SQL语句就可以把结果查出来的方法: 那个row_number函数在MSSQL2008以上才

linq中分组查询而且获取每个分组中的第一条记录,数据用于分页绑定

LINQ分组取出第一条数据 Person1: Id=1, Name="Test1" Person2: Id=1, Name="Test1" Person3: Id=2, Name="Test2" 以上list如果直接使用distinct方法进行过滤,仍然返回3条数据,而需要的结果是2条数据.下面给出解这个问题的方法: 方法1: Distinct 方法中使用的相等比较器.这个比较器需要重写Equals和GetHashCode方法,个人不推荐,感觉较

分区函数Partition By的与row_number()的用法以及与排序rank()的用法详解(获取分组(分区)中前几条记录)(转)

转载地址:http://www.cnblogs.com/linJie1930906722/p/6036053.html partition by关键字是分析性函数的一部分,它和聚合函数不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录,partition by用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组,分区函数一般与排名函数一起使用. 准备测试数据: create table Student --学生成绩表 ( id int, --主键 Grad

SQLServer 分组查询相邻两条记录的时间差

原文:SQLServer 分组查询相邻两条记录的时间差 首先,我们通过数据库中表的两条记录来引出问题,如下图 以上为一个记录操作记录的表数据.OrderID为自增长列,后面依次为操作类型,操作时间,操作人. 现在的问题是:要求筛选出数据库中从“接收”到“送出”的时间差超过2天的全部记录.即如上图两笔单据中,红色框既是要筛选出的,绿色框为正常过滤的. 为了定位相邻记录,方法为给查询语句的返回记录加个自动编号列放入临时表中,再对临时表进行操作. --1.首先查出表中符合條件的所有信息 select

保留mysql数据库中的最新1000条记录

<?php mysql_connect("localhost","root","root");mysql_select_db("test");//保留最新的1000条记录$limit=1000;$query="select `id` from `news`";$result=mysql_query($query);$num=mysql_num_rows($result);if($num>$lim

mySQL中插入多条记录

用一条INSERT向SQL中插入多条记录 2008-12-22 10:07:01|  分类: 记事本_编程技术|举报|字号 订阅 Sql 语法: 插入多行记录 Insert Into TableName1 ( column1 ,column2 ) Select column1,column2 From TableName2 Insert Into TableName ( column1,column2 ) Values ( value1,value2 ) , ( value3,value4 )

ACCESS-delphi向中插入一条记录报错,但ACCESS不会

问题:在DELPHI中向ACCESS中插入一条记录时,提示“插入错误”,但是取出SQL直接放在ACCESS中插入成功?答:原因是插入语句中的字段名是DELPHI的内部标示符.

30-4 向表中插入多条记录

----------------------向表中插入多条记录-------------------- --将TblStudent表的结构和表中的数据备份到TblStudent20140506Backup表中. --TblStudent20140506Backup表是在执行 select into 语句时创建的. --select into 语句不能重复执行,因为每次执行都会创建一个TblStudent20140506Backup表. --TblStudent表结构包括自动编号列都会在TblSt