有一个表,是装新闻的。然后有一个字段,是装新闻类型的,
现在想写一条SQL语句,实现每个类型下按时间DESC取出前N条也就是取出每个类型下最新发布的N条新闻这个语句应该肿么写呢???

解决方案 »

  1.   


    Select * From
    (
    Select *, (Row_Number() OVER (PARTITION BY classid Order by adddate DESC)) as Row_Num From g_News
    ) ntb Where Row_Num<=5
      

  2.   

    IF object_id('tb') IS NOT NULL DROP TABLE TB CREATE TABLE TB(id INT IDENTITY(1,1) PRIMARY KEY,item CHAR(1),times DATETIME, news NVARCHAR(50)) INSERT INTO dbo.TB SELECT 'A',DATEADD(DAY,ABS(CHECKSUM(NEWID()))%365,'2011-01-01'),'GFDSGH' UNION ALL SELECT 'A',DATEADD(DAY,ABS(CHECKSUM(NEWID()))%365,'2011-01-01'),'GRJEKGHY' UNION ALL SELECT 'A',DATEADD(DAY,ABS(CHECKSUM(NEWID()))%365,'2011-01-01'),'HYRTDJIOVFC' UNION ALL SELECT 'B',DATEADD(DAY,ABS(CHECKSUM(NEWID()))%365,'2011-01-01'),'34R54FDSA' UNION ALL SELECT 'B',DATEADD(DAY,ABS(CHECKSUM(NEWID()))%365,'2011-01-01'),'BVGFXBNH' UNION ALL SELECT 'B',DATEADD(DAY,ABS(CHECKSUM(NEWID()))%365,'2011-01-01'),'CVXZFGR' --创建测试数据 SELECT id , item , times , news FROM ( SELECT ROW_NUMBER() OVER ( PARTITION BY item ORDER BY times DESC ) AS rowid , * FROM dbo.TB ) a WHERE rowid <= 2--前几条这里就写几