首页 新闻 搜索 专区 学院

SQL 表VIP 里面有 字段VIPID 字段time ,ID有重复 time无重复 怎么获取到离现在时间最近的 那一批ID

0
悬赏园豆:10 [已解决问题] 解决于 2012-09-01 11:16

SQL 表VIP 里面有 字段VIPID 字段XFtime ,存放着消费信息

ID+XFtime无重复 怎么获取到离现在时间最近的 那一批ID

 

换句话就是说要的到每个卡号 离现在最近的消费时间  (本次消费时间)  和 第二近的消费时间(上次消费时间)  如只有一次   上次消费时间为空
高手给个思路 最好给写个例子

火火火的马的主页 火火火的马 | 初学一级 | 园豆:145
提问于:2012-08-31 16:55
< >
分享
最佳答案
0
select t1.ID,max(t1.bc) as "本次消费时间",max(t2.sc) as "上次消费时间" from(
        select ID, case when rn=1 then XFtime  else null end as bc from(
        select row_number() over(partition by ID order by XFtime  desc) as rn, ID,XFtime  from VIP
        )
    ) t1
    join 
    (
        select ID, case when rn=2 then XFtime  else null end as sc from(
        select row_number() over(partition by ID order by XFtime  desc) as rn, ID,XFtime  from VIP
        )
    ) t2
    on t1.ID=t2.ID 
    group by t1.ID

我用的是Oralce可能MSSQL有的写法不一样。

收获园豆:10
向往-SONG | 老鸟四级 |园豆:4853 | 2012-08-31 17:37

TSql   都差不多了        你的思路  我了解了     我是 top2 except top1 来得到上次消费时间

 top1就是本次消费时间

建了2张临时表   分别存放两次的时间      不过效率很低    600多条记录   查了13秒

火火火的马 | 园豆:145 (初学一级) | 2012-09-01 08:38

@Thomas Anderson: 

group by 放里面,sql2005,2000多条瞬间:

select t1.ID,t1.bc as "本次消费时间",t2.sc as "上次消费时间" from(
        select ID, max(case when rn=1 then XFtime  else null end) as bc from(
        select row_number() over(partition by ID order by XFtime  desc) as rn, ID,XFtime  from VIP
        ) t group by id
    ) t1
    join 
    (
        select ID, max(case when rn=2 then XFtime  else null end) as sc from(
        select row_number() over(partition by ID order by XFtime  desc) as rn, ID,XFtime  from VIP
        ) t group by id
    ) t2
    on t1.ID=t2.ID 
向往-SONG | 园豆:4853 (老鸟四级) | 2012-09-01 10:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册