例如数据库中有N条记录,我要查询某字段为第二大的那条记录,该怎么办?不要用排降序取第二条记录的方法具体问题时这样的:某服务器,有N个客户端,会上报数据,上报的记录中有日期,并未在其他数据表中记录上报日期。现在要去统计出各个客户端最近2次上报的日期,该怎么做?要最近上报日期很好办:select 站点名,max(日期) 最后上传日期  from 上报表  group by 站点
可前一次的日期怎么办呢?

解决方案 »

  1.   

    SELECT TOP 2 * FROM TB ORDER BY 最后上传日期 DESC??
      

  2.   

    select 
        t.站点名,max(t.日期) 上传日期 
    from 
        上报表 t
    where 
        日期!=(select max(日期) from 上报表 where 站点名=t.站点名)
    group by 
        站点
      

  3.   

    select top 1 * from TB where 日期<(select max(日期) from TB order by 日期 desc)
      

  4.   

    select top 1 * from  
    (select top 2 * from tablename order by columnname) a 
    order by columnname desc 
      

  5.   

    select 站点名,max(日期) 最后上传日期  from 上报表  group by 站点
    UNION ALL
    select 站点名,max(日期) 最后上传日期  from 上报表  
    WHERE 日期 NOT IN  (select max(日期) 最后上传日期  from 上报表  group by 站点 )
    group by 站点
      

  6.   

    select 站点名,max(日期) 最后上传日期  from 上报表  where 日期<>(select max(日期)   from 上报表  group by 站点 ) group by 站点 
      

  7.   

    顶钻钻。
    如果是sql2005的话。。
    select 站点,日期 as 第二大上传日期  
    from (select 站点,日期,rn=row_number() over(partition by 站点 order by 日期 desc) from 上报表)  t
    where rn=2
      

  8.   

    按gid 分组得到第n大的date
    SELECT * FROM #T AS T WHERE n-1=(SELECT COUNT(*) FROM #T WHERE GID=T.GID AND Date>T.Date)