显示  包括选择的这条,在加上 选择年度的此人 最近的 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. MFC实现数独(1)

    雨天纷纷扰扰,数月里每日有雨,这个夏天不热,写这个数独的动机很简单:实践是最好的成长方式,想要获得自信,必有这么一遭,我躲不过.至于决定记录成博客,则是因为很久没有写文章,经常感觉脑海里很空白,屡次开 ...

  2. DBMS_LOB

    1.LOB背景 在现在的系统开发中,需要存储的已不仅仅是简单的文字信息,也包括一些图片.音像资料或者超长的文本,这要求后台数据库具有存储这些数据的能力,Oracle通过提供LOB对象实现了该功能. 2 ...

  3. Vue.js之初印象

    一.背景 MVVM模式,很多人在说在用,好吧,我落后了,我目前的项目木有用到MVVM模式的框架,vuejs,reactjs,angularjs,nonono,自己去捣鼓过ng,项目木有用到.实在不敢称 ...

  4. C# 上传excel文档解析出里面数据

    if (fileExt.ToUpper() == ".XLS" || fileExt.ToUpper() == ".XLSX" || fileExt.ToUpp ...

  5. PostgreSQL的 initdb 源代码分析之十五

    继续分析: if (pwprompt || pwfilename) get_set_pwd(); 由于我启动initdb的时候,没有设置口令相关的选项,故此略过. 接下来: setup_depend( ...

  6. Oracle DataGuard搭建(二)

    三.配置备库 创建catalog数据库 用dbca创建数据库,用oracle自带模板,不用em,启用归档,同一管理密码oracle,global name:dbcat1.node249.gewara, ...

  7. C++转义字符使用

    编码过程中字符串可能过长,这通常须要换行,对于换行转义字符\ ,使用时要保证\后无空格,否则会出现"error C2017:非法的转义字符 "错误 如 //  ''\"后 ...

  8. STL中heap算法(堆算法)

     ①push_heap算法 以下是push_heap算法的实现细节.该函数接收两个迭代器,用来表现一个heap底部容器(vector)的头尾,而且新元素已经插入究竟部的最尾端. template ...

  9. ie提示jquer缺少标识符,字符串或数字

    属性之间是要用","分隔的,但最后一个属性的后面在IE中是不能有的,firefox可有可无. 至于最后的";"是另外一回事了.这是Javascript的语法问题 ...

  10. 利用 Composer 一步一步构建自己的 PHP 框架(四)——使用 ORM

    本教程示例代码见 https://github.com/johnlui/My-First-Framework-based-on-Composer 回顾 经过前三篇文章 基础准备 . 构建路由 和 设计 ...