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

数据库中二张表,用户表和奖金记录表,奖金记录表中一个用户有多条信息,有一个生效时间,现在要查询:

奖金生效时间在三天前,每个用户取最新一条奖金记录,且用户末锁定

以前用的方法是直接写在C#代码中的:

for(所有末锁定用户)

 查询奖金记录表 top 1 where uid=??? order by 生效时间 desc

 if(上面查询的记录生效时间在三天前)

  输出

 

今天花了大部分时间研究了一下,终于找到一条SQL语句就可以把结果查出来的方法:

那个row_number函数在MSSQL2008以上才会有!!!

时间: 2024-10-13 00:32:12

MSSQL分组取后每一组的最新一条记录的相关文章

在SQL Server2005/2008中对记录进行分组,并获得每组前N条记录

本文为原创,如需转载,请注明作者和出处,谢谢!     假设有一个表,SQL语句如下: CREATE TABLE [dbo].[scan](     [km] [int] NULL,     [kh] [int] NULL,     [cj] [int] NULL ) ON [PRIMARY]     其中km为科目号.kh为考生号.cj为成绩,现对km和kh进行分组,并获得每组前2条记录(按cj从高到低排序).基本思想是为每组加一个序号列,再用where取序号小于等于2的.SQL语句如下: s

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条记录

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

<?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&

分页-mysql某个字段排序后按这个字段分组取前10个的数据

问题描述 mysql某个字段排序后按这个字段分组取前10个的数据 需求是按某个字段分组,再按分组分页,取出每页分组里的所有数据. 例如表数据 Id 组名 1 A 2 A 3 B 4 A 5 B 6 C 7 F 8 C 9 D 10 E 11 F 每页取两组数据,第一页结果是 Id 组名 1 A 2 A 4 A 3 B 5 B 第二页结果是 Id 组名 6 C 8 C 9 D 第三页结果是 Id 组名 10 E 7 F 11 F 这有办法用一条sql查吗 解决方案 不知道你的分组的依据是什么,至于

mysql分组取每组前几条记录(排名) 附group by与order by的研究_Mysql

--按某一字段分组取最大(小)值所在行的数据 复制代码 代码如下: /* 数据如下: name val memo a 2 a2(a的第二个值) a 1 a1--a的第一个值 a 3 a3:a的第三个值 b 1 b1--b的第一个值 b 3 b3:b的第三个值 b 2 b2b2b2b2 b 4 b4b4 b 5 b5b5b5b5b5 */ --创建表并插入数据: 复制代码 代码如下: create table tb(name varchar(10),val int,memo varchar(20)

sql分组取最大记录方法

先看看group by 语句的用法 GROUP BY 语句 GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组. SQL GROUP BY 语法 点击可查看源文  代码如下 复制代码 SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name 在SQL的 语句一起使用同样数目的SQL聚合函数提

mysql 分组group by排序取每条记录中,时间最大的一条记录

mysql 分组 group by, 排序 取每条记录中,时间最大的一条记录 以下是 test 表,测试sql CREATE TABLE IF NOT EXISTS `test` ( `id` int(10) unsigned NOT NULL auto_increment, `install` int(10) unsigned NOT NULL, `day` int(10) unsigned NOT NULL, `aid` int(10) unsigned NOT NULL, PRIMARY

《叩响C#之门》正则表达式(五) 分组、后向引用、替换

20.7 分组和后向引用 如果没有括号,正则表达式"tr|bee"匹配"tr"或"bee",加了括号后,"(tr|b)ee"匹配"tree"或"bee",这种带括号的形式称为括号表达式.

select-mysql 按月分组,取每月日期小的

问题描述 mysql 按月分组,取每月日期小的 DROP TABLE IF EXISTS t_test; /*!40101 SET @saved_cs_client = @@character_set_client /; /!40101 SET character_set_client = utf8 /; CREATE TABLE t_test (id int(11) NOT NULL AUTO_INCREMENT,org varchar(10) DEFAULT NULL,status date