zoukankan      html  css  js  c++  java
  • 函数 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
  • 相关阅读:
    同步内核缓冲区sync、fsync和fdatasync函数
    HDU 1496 Train Problem I 火车问题1(桟,水)
    HDU 1496 Equations 等式(二分+暴力,技巧)
    HDU 2577 How to Type (DP,经典)
    HDU 1247 Hat’s Words (字符串匹配,暴力)
    HDU 1548 A strange lift 奇怪的电梯(BFS,水)
    HDU 1711 Number Sequence (数字KMP,变形)
    204 Count Primes 计数质数
    203 Remove Linked List Elements 删除链表中的元素
    202 Happy Number 快乐数
  • 原文地址:https://www.cnblogs.com/xiaozizi/p/5816763.html
Copyright © 2011-2022 走看看