函数 datediff(根据objid 获取同name 同年度最近的4条记录)
显示 包括选择的这条,在加上 选择年度的此人 最近的 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条记录)的更多相关文章
- SQL获取分组后取某字段最大一条记录(求每个类别中最大的值的列表)
获取分组后取某字段最大一条记录 方法一:(效率最高) select * from test as a where typeindex = (select max(b.typeindex) from t ...
- MySQL中的RAND()函数使用详解(order by rand() 随机查询取前几条记录)
MySQL RAND()函数调用可以在0和1之间产生一个随机数: mysql> SELECT RAND( ), RAND( ), RAND( ); +------------------+--- ...
- SQL 分组后获取其中一个字段最大值的整条记录
--有id,name,createDate的一张表testTable--根据name分组,获取每组中createDate最大的那条记录(整条)查询出来------------------------- ...
- 分区函数Partition By的与row_number()的用法以及与排序rank()的用法详解(获取分组(分区)中前几条记录)
partition by关键字是分析性函数的一部分,它和聚合函数不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录,partition by用于给结果集分组,如果没有指 ...
- JavaScript 在函数中使用Ajax获取的值作为函数的返回值
解决:JavaScript 在函数中使用Ajax获取的值作为函数的返回值,结果无法获取到返回值 原因:ajax默认使用异步方式,要将异步改为同步方式 案例:通过区域ID,获取该区域下所有的学校 var ...
- Oracle常用函数:DateDiff() 返回两个日期之间的时间间隔自定义函数
首先在oracle中没有datediff()函数可以用以下方法在oracle中实现该函数的功能:1.利用日期间的加减运算天:ROUND(TO_NUMBER(END_DATE - START_DATE) ...
- lua入门之二:c/c++ 调用lua及多个函数返回值的获取
当 Lua 调用 C 函数的时候,使用和 C 调用 Lua 同样类型的栈来交互. C 函数从栈中获取她的參数.调用结束后将返回结果放到栈中.为了区分返回结果和栈中的其它的值,每一个 C 函数还会返回结 ...
- 获取分组后的TOP 1和TOP N记录
MySQL获取分组后的TOP 1和TOP N记录 有时会碰到一些需求,查询分组后的最大值,最小值所在的整行记录或者分组后的top n行的记录,在一些别的数据库可能有窗口函数可以方面的查出来,但是MyS ...
- postgresql-从表中随机获取一条记录
目录 postgresql如何从表中高效的随机获取一条记录 随机获取一条记录random() 改写1 改写2 改写3 对比 注意 结语 postgresql如何从表中高效的随机获取一条记录 selec ...
随机推荐
- TypeScript学习笔记(二):基本数据类型及数据转换
数据类型 我们来看看TypeScript中的基本数据类型都有哪些. boolean 布尔值,支持true和false. var isDone: boolean = false; 默认为undefine ...
- SQL拆分多规则的字符串分离数字。
--拆分多规则字符串 DECLARE @Codes NVARCHAR(MAX) SET @Codes = '6*BC-007,*BC-016,9*BC-015' --对于*BC-015这种情况,则Qt ...
- Exchange模式功能
Exchange模式: Outlook中的投票功能: 新建邮件--选项--使用投票按钮
- java foreach编辑讲解
foreach语句使用总结 foreach语句是java5的新特征之一,在遍历数组.集合方面,foreach为开发人员提供了极大的方便. foreach语句是for语句的特殊简化版本,但是foreac ...
- stack对象与heap对象
从高地址到低地址,分别是stack,heap,static object,stack地址往下增长,heap地址往上增长.只要记住:stack栈顶地址反而小,就知道往下增长了. 禁止产生堆对象 1.产生 ...
- Android 实现书籍翻页效果----升级篇
自从之前发布了<Android 实现书籍翻页效果----完结篇 >之后,收到了很多朋友给我留言,前段时间由于事情较多,博客写得太匆忙很多细节地方没有描述清楚.所以不少人对其中的地方有不少不 ...
- javascript运行机制之执行顺序详解(转)
转自http://www.admin10000.com/document/3385.html JavaScript是一种描述型脚本语言,它不同于java或C#等编译性语言,它不需要进行编译成中间语言, ...
- android141 360 安装软件管理java代码
AppManagerActivity package com.itheima52.mobilesafe.activity; import android.app.Activity; import an ...
- qt 获取系统磁盘空间大小
quint64 getDiskFreeSpace(QString driver) { LPCWSTR lpcwstrDriver=(LPCWSTR)driver.utf16(); ULARGE_INT ...
- Scala中的构造器
Scala中的构造器 Scala中的构造器分为两类,主构造器和辅助构造器 主构造器是通过类名后面跟的括号里加参数列表来定义 辅助构造器是通过关键字this定义 定义一个无参主构造器 class rec ...