显示  包括选择的这条,在加上 选择年度的此人 最近的 3条。(最多显示4条)
1.@count>4 记录数大于4条
2.@count<4 全显示 create table temp(
objid int identity(1,1) primary key ,
name varchar(20) ,
rq datetime default(getdate())
)
select * from temp --根据objid 获取同name 同年度最近的4条记录,含该条。 declare @objid int
set @objid=1
exec pro_test @objidselect a.* from temp as a
join (select name,year(rq) as rq from temp where objid=1) as b
on a.name=b.name and year(a.rq)=b.rq
union
--objid最近的条数据 select top 4 * from temp as a
join (select * from temp where objid=1) as b
on a.rq<b.rq
order by a.rq desc insert into temp(name,rq) values ('a','2013-3-3') insert into temp(name,rq) values ('a','2013-3-9')
insert into temp(name,rq) values ('a','2013-4-3')
insert into temp(name,rq) values ('a','2013-5-3')
insert into temp(name,rq) values ('a','2013-6-3')
insert into temp(name,rq) values ('a','2013-9-3')
insert into temp(name,rq) values ('a','2013-9-9')
insert into temp(name,rq) values ('a','2013-10-3')
insert into temp(name,rq) values ('a','2013-10-11')
insert into temp(name,rq) values ('a','2013-11-3')
insert into temp(name,rq) values ('a','2013-11-13')
insert into temp(name,rq) values ('a','2013-12-3')
insert into temp(name,rq) values ('a','2013-12-13') insert into temp(name,rq) values ('b','2013-3-3') insert into temp(name,rq) values ('b','2013-3-9')
insert into temp(name,rq) values ('b','2013-4-3')
insert into temp(name,rq) values ('b','2013-5-3')
insert into temp(name,rq) values ('b','2013-6-3')
insert into temp(name,rq) values ('b','2013-9-3')
insert into temp(name,rq) values ('b','2013-9-9')
insert into temp(name,rq) values ('b','2013-10-3')
insert into temp(name,rq) values ('b','2013-10-11')
insert into temp(name,rq) values ('b','2013-11-3')
insert into temp(name,rq) values ('b','2013-11-13')
insert into temp(name,rq) values ('b','2013-12-3')
insert into temp(name,rq) values ('b','2013-12-13') insert into temp(name,rq) values ('c','2013-3-3') insert into temp(name,rq) values ('c','2013-3-9')
insert into temp(name,rq) values ('c','2013-4-3')
insert into temp(name,rq) values ('c','2013-5-3')
insert into temp(name,rq) values ('c','2013-6-3')
insert into temp(name,rq) values ('c','2013-9-3')
insert into temp(name,rq) values ('c','2013-9-9')
insert into temp(name,rq) values ('c','2013-10-3')
insert into temp(name,rq) values ('c','2013-10-11')
insert into temp(name,rq) values ('c','2013-11-3')
insert into temp(name,rq) values ('c','2013-11-13')
insert into temp(name,rq) values ('c','2013-12-3')
insert into temp(name,rq) values ('c','2013-12-13') declare @objid int
set @objid=9
declare @name varchar(20),@rq datetime ,@count int,@str varchar(200)
select @name = name,@rq =rq from temp where [objid]=@objid
select @count=COUNT(*) from temp
where name=@name and YEAR (rq)= YEAR(@rq) print @count
if @count>4
begin select top 4 * from temp
where name=@name and YEAR (rq)= YEAR(@rq)
order by abs(datediff(day,sfrq,@sfrq)) asc
end
else
begin
select * from temp where name=@name and YEAR (rq)= YEAR(@rq)
end 比较时间类型
使用datediff()
datediff(day,sfrq,@sfrq) 返回两时间日期差值。
========================================================================================================= declare @id1 int,@id2 int,@id3 int,@id4 int
declare @sickcode varchar(20),@sfrq datetime ,@count int,@str varchar(200)
select @sickcode = sickcode,@sfrq =sfrq from tablename where objid=@objid
select @count=COUNT(*) from tablename
where sickcode=@sickcode and YEAR (sfrq)= YEAR(@sfrq) if @count>4
begin
select @str=@str+cast(ta.[objid] as varchar(10))+',' from(
select top 4 [objid] ,sfrq from tablename
where sickcode=@sickcode and YEAR (sfrq)= YEAR(@sfrq)
order by abs(datediff(day,sfrq,@sfrq)) asc ) ta order by ta.sfrq
end
else
begin
select @str=@str+cast(tb.[objid] as varchar(10))+',' from(
select [objid],sfrq from tablename where sickcode=@sickcode and YEAR (sfrq)= YEAR(@sfrq)
) tb order by tb.sfrq
end

函数 datediff(根据objid 获取同name 同年度最近的4条记录)的更多相关文章

  1. SQL获取分组后取某字段最大一条记录(求每个类别中最大的值的列表)

    获取分组后取某字段最大一条记录 方法一:(效率最高) select * from test as a where typeindex = (select max(b.typeindex) from t ...

  2. MySQL中的RAND()函数使用详解(order by rand() 随机查询取前几条记录)

    MySQL RAND()函数调用可以在0和1之间产生一个随机数: mysql> SELECT RAND( ), RAND( ), RAND( ); +------------------+--- ...

  3. SQL 分组后获取其中一个字段最大值的整条记录

    --有id,name,createDate的一张表testTable--根据name分组,获取每组中createDate最大的那条记录(整条)查询出来------------------------- ...

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

    partition by关键字是分析性函数的一部分,它和聚合函数不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录,partition by用于给结果集分组,如果没有指 ...

  5. JavaScript 在函数中使用Ajax获取的值作为函数的返回值

    解决:JavaScript 在函数中使用Ajax获取的值作为函数的返回值,结果无法获取到返回值 原因:ajax默认使用异步方式,要将异步改为同步方式 案例:通过区域ID,获取该区域下所有的学校 var ...

  6. Oracle常用函数:DateDiff() 返回两个日期之间的时间间隔自定义函数

    首先在oracle中没有datediff()函数可以用以下方法在oracle中实现该函数的功能:1.利用日期间的加减运算天:ROUND(TO_NUMBER(END_DATE - START_DATE) ...

  7. lua入门之二:c/c++ 调用lua及多个函数返回值的获取

    当 Lua 调用 C 函数的时候,使用和 C 调用 Lua 同样类型的栈来交互. C 函数从栈中获取她的參数.调用结束后将返回结果放到栈中.为了区分返回结果和栈中的其它的值,每一个 C 函数还会返回结 ...

  8. 获取分组后的TOP 1和TOP N记录

    MySQL获取分组后的TOP 1和TOP N记录 有时会碰到一些需求,查询分组后的最大值,最小值所在的整行记录或者分组后的top n行的记录,在一些别的数据库可能有窗口函数可以方面的查出来,但是MyS ...

  9. postgresql-从表中随机获取一条记录

    目录 postgresql如何从表中高效的随机获取一条记录 随机获取一条记录random() 改写1 改写2 改写3 对比 注意 结语 postgresql如何从表中高效的随机获取一条记录 selec ...

随机推荐

  1. 应用XML作为数据库的快速开发框架

    背景 我经常应用C#开发一些小的桌面程序,这些桌面程序往往有以下几个特点: 程序比较小,开发周期很短. 程序的数据量不大,多数情况下不超过1万行记录. 对程序的性能要求不高. 程序并发很少或者基本没有 ...

  2. ADO.NET 快速入门(七):使用数据库事务

    数据库事务用于控制数据提交到数据库.例如,在标准的账户程序,账户的借贷必须同时完成.由于电脑偶尔发生故障(电力中断.网络中断,等等),可能有些记录被更新或者添加,但是另外一些没有.为了避免这些情况,可 ...

  3. 网络编程中常见地址结构与转换(IPv4/IPv6)

    1. sockaddr/sockaddr_in/in_addr (IPv4).sockaddr6_in/in6_addr/addrinfo (IPv6) struct sockaddr { unsig ...

  4. IT项目管理工具总结(转载)

    以前用过一个cs版的忘记叫啥名了,还用个禅道,感觉一般“5. 测试管理: 项目软件缺陷Bug状态跟踪”在公司内部自己测试或者试用期上线后后期维护阶段用的多,有的公司单独做个系统让用户提问题来修改,也是 ...

  5. Codeforces Round #330 (Div. 1) A. Warrior and Archer 贪心 数学

    A. Warrior and Archer Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/594 ...

  6. 实时数据采集传输软件LDM配置

    本环境一共两个机器:cma.ldm87.gov.cn(hostname)机器作为upstream LDM,cma.ldm84.gov.cn(hostname)机器作为downstream LDM.下面 ...

  7. [AngularJS] ngCloak

    The ngCloak directive is used to prevent the Angular html template from being briefly displayed by t ...

  8. Android横竖屏切换处理

    Android横竖屏要解决的问题应该就两个: 1.布局问题:2.重新载入问题   一.布局问题: 如果不想让软件在横竖屏之间切换,最简单的办法就是在项目的AndroidManifest.xml中找到你 ...

  9. rand值出现负数的解决方案

    当rand($number)或者mt_rand($number)的时候,$number太大,超过pow(2,31) - 1;即整型最大值的时候,会出现负数. 如果只是单纯转换成整数而已的话,可以采用s ...

  10. Ruby on Rails Tutorial 第四章 Rails背后的Ruby 之 其他数据类型(二)

    1.方法 定义如下所示: def string_message(str='') if str.empty? "It's an empty string!" else "T ...