是这样的,我有下列的一个结果集
------------------------------------------------------------------------------------
CYEA CM BDATE      FDATE            HRID    HOUSEID BEGINDATE       MONEY      ISNEW
---- -- ---------- ---------- ---------- ---------- ---------- ---------- ----------
2008 1  01-1月 -08 31-1月 -08
2008 2  01-2月 -08 28-2月 -08
2008 3  01-3月 -08 31-3月 -08
2008 4  01-4月 -08 30-4月 -08
2008 5  01-5月 -08 31-5月 -08
2008 6  01-6月 -08 30-6月 -08
2008 7  01-7月 -08 31-7月 -08
2008 8  01-8月 -08 31-8月 -08
2008 9  01-9月 -08 30-9月 -08         61         91 11-9月 -08       1000          1
2008 9  01-9月 -08 30-9月 -08         32         91 09-9月 -08        999          0
2008 9  01-9月 -08 30-9月 -08         31         91 09-9月 -08        800          0
2008 9  01-9月 -08 30-9月 -08          2         91 08-9月 -08        600          0
2008 9  01-9月 -08 30-9月 -08          1         91 08-9月 -08        500          0
2008 10 01-10月-08 31-10月-08
2008 11 01-11月-08 30-11月-08
2008 12 01-12月-08 31-12月-08
--------------------------------------------------------------------------------------
可以看出,我是想做出个报表
看上面,属于9月的有很多条(ps:因为数据少,所以别的月份没有,按说别的月份也应该像9月这种情况)
我现在像取出12条数据,就是1-12月的情况,以9月为例,9月的数据应该是HRID=61那条,也就是想要的是按HRID desc,BEGINDATE desc得到的第一条记录....所有1-12月这12条记录的内容都是相应月内按HRID desc,BEGINDATE desc得到的第一条记录,
不知道我说清楚没....
望告之....sql功底实在差了些,汗颜...

解决方案 »

  1.   


    select *
    from
    (
       select t.*,
           row_number over (partition by to_char(FDATE,'yyyy-mm') order by HRID desc,BEGINDATE desc) jj 
    )
    where jj=1试试这个,我没试过
      

  2.   


    上面少写了个from
    select *
    from
    (
       select t.*,
           row_number over (partition by to_char(FDATE,'yyyy-mm') order by HRID desc,BEGINDATE desc) jj 
       from tab t
    )
    where jj=1试试这个
      

  3.   

    row_number()呵呵,应该加上(),晕了
      

  4.   


    SELECT *
      FROM (SELECT T.*,
                   ROW_NUMBER OVER(PARTITION BY CYEA, CM ORDER BY HRID DESC, BEGINDATE DESC) RN
              FROM YOUR_TABLE T)
     WHERE RN = 1;
      

  5.   


    SELECT *
      FROM (SELECT T.*,
                   ROW_NUMBER() OVER(PARTITION BY CYEA, CM ORDER BY HRID DESC, BEGINDATE DESC) RN
              FROM YOUR_TABLE T)
     WHERE RN = 1;
      

  6.   

    select CYEA, CM, BDATE, FDATE, HRID, HOUSEID, BEGINDATE, MONEY, ISNEW
      from (select *,
                   row_number() over(partition by cm order by HRID desc ,BEGINDATE desc) rn
              from tablename)
     where rn = 1
      

  7.   

    太强了,太强了,有没有好心人告诉我如果在sql server 2000里遇到这样的问题,又该怎样....