none
有一堆记录,按照时间降序排列(order by riqi desc),那么第一条记录就是我想取得的,要是我想区倒数第二条记录,应该怎么写? RRS feed

  • 问题

  • select id from gzrz where zzjgdm=10 order by riqi desc

    给大家翻译一下:
    gzrz:一个表名
    zzjgdm:组织机构代码,取得zzjgdm=10这个部门的最后一条记录
    order by riqi desc:按照时间取最后一条记录

    以上语句如果用ExecuteScalar方法,那么就返回了最后一条的id,那么我如果想获取倒数第二条id,请问如何写呢?
    2009年6月3日 9:15

答案

  • -- 第一条
    SELECT TOP 1 id from gzrz where zzjgdm=10 order by riqi ASC
    -- 最后一条
    SELECT TOP 1 id from gzrz where zzjgdm=10 order by riqi DESC
    -- 倒数第二条
    SELECT TOP 1 id from gzrz A where zzjgdm=10 AND NOT id in(SELECT TOP 1 id from gzrz where zzjgdm=10 order by riqi DESC) order by riqi DESC
    -- 倒数第三条
    SELECT TOP 1 id from gzrz A where zzjgdm=10 AND NOT id in(SELECT TOP 2 id from gzrz where zzjgdm=10 order by riqi DESC) order by riqi DESC
    -- 以此类推

    知识改变命运,奋斗成就人生!
    • 已标记为答案 杜宏宇 2009年6月3日 10:39
    • 取消答案标记 杜宏宇 2009年6月3日 10:39
    • 已标记为答案 杜宏宇 2009年6月4日 0:41
    2009年6月3日 9:23
  • SQL2005 以后的版本:
    select id from gzrz where
    where row_number() over(partition by id order by riqi desc) =2
     and zzjgdm=10
    Need for Speed
    • 已标记为答案 杜宏宇 2009年6月3日 10:39
    • 取消答案标记 杜宏宇 2009年6月3日 10:40
    • 已标记为答案 杜宏宇 2009年6月4日 0:41
    2009年6月3日 9:24
  • select top 2 id from gzrz where zzjgdm=10 order by riqi desc

    用datareader读
    http://feiyun0112.cnblogs.com/
    • 已标记为答案 杜宏宇 2009年6月3日 10:39
    • 取消答案标记 杜宏宇 2009年6月3日 10:40
    • 已标记为答案 杜宏宇 2009年6月4日 0:41
    2009年6月3日 9:40

全部回复

  • -- 第一条
    SELECT TOP 1 id from gzrz where zzjgdm=10 order by riqi ASC
    -- 最后一条
    SELECT TOP 1 id from gzrz where zzjgdm=10 order by riqi DESC
    -- 倒数第二条
    SELECT TOP 1 id from gzrz A where zzjgdm=10 AND NOT id in(SELECT TOP 1 id from gzrz where zzjgdm=10 order by riqi DESC) order by riqi DESC
    -- 倒数第三条
    SELECT TOP 1 id from gzrz A where zzjgdm=10 AND NOT id in(SELECT TOP 2 id from gzrz where zzjgdm=10 order by riqi DESC) order by riqi DESC
    -- 以此类推

    知识改变命运,奋斗成就人生!
    • 已标记为答案 杜宏宇 2009年6月3日 10:39
    • 取消答案标记 杜宏宇 2009年6月3日 10:39
    • 已标记为答案 杜宏宇 2009年6月4日 0:41
    2009年6月3日 9:23
  • SQL2005 以后的版本:
    select id from gzrz where
    where row_number() over(partition by id order by riqi desc) =2
     and zzjgdm=10
    Need for Speed
    • 已标记为答案 杜宏宇 2009年6月3日 10:39
    • 取消答案标记 杜宏宇 2009年6月3日 10:40
    • 已标记为答案 杜宏宇 2009年6月4日 0:41
    2009年6月3日 9:24
  • select top 2 id from gzrz where zzjgdm=10 order by riqi desc

    用datareader读
    http://feiyun0112.cnblogs.com/
    • 已标记为答案 杜宏宇 2009年6月3日 10:39
    • 取消答案标记 杜宏宇 2009年6月3日 10:40
    • 已标记为答案 杜宏宇 2009年6月4日 0:41
    2009年6月3日 9:40