CREATE PROCEDURE GetVideo
(
@Top int,
@Strwhere varchar(200)

AS
declare @Sql varchar(500)
set rowcount @Top
set @Sql='select ID,UserID,Title,Logo,Url,Detail,CreateTime,Passed,Tj,Hit,Dig,Bury from Video where Passed=1 '+@Strwhere
exec (@Sql)
GO
想要查询出UserID不重复的26条记录
where后面该怎么写呢?

解决方案 »

  1.   

    主要重复UserID
    的处理规则是什么?
      

  2.   

    @Strwhere 
    传的是什么?
      

  3.   

    贴个图给大侠看下就是一个USERID只能显示一条!
    where后面就是要自己传入进去的条件
      

  4.   

    一个UserID只能显示一条,那一条根据CreateTime来排序!取最新的
    该怎么写呢!
      

  5.   

    @Strwhere=' AND NOT EXISTS(SELECT 1 FROM Video T2 WHERE Passed=1 AND T2.ID<ID)'
      

  6.   

    --try
    CREATE PROCEDURE GetVideo
    (
        @Top int,
        @Strwhere varchar(200)

    AS
    declare @Sql varchar(500)
    set rowcount @Top
    set @Sql='select ID,
                     UserID,
                     Title,
                     Logo,
                     Url,
                     Detail,
                     CreateTime,
                     Passed,
                     Tj,
                     Hit,
                     Dig,
                     Bury 
               from Video t
               where Passed=1 
               and not exists(select 1 
                              from Video
                              where UserID=t.UserID and id>t.id) '+@Strwhere
    exec (@Sql)
    GO
      

  7.   

    select ID,UserID,Title,Logo,Url,Detail,CreateTime,Passed,Tj,Hit,Dig,Bury from Video where Passed=1 AND NOT EXISTS(SELECT 1 FROM Video T2 WHERE Passed=1 AND T2.CreateTime>CreateTime)
      

  8.   

    @Strwhere=' AND NOT EXISTS(SELECT 1 FROM Video T2 WHERE Passed=1 AND T2.CreateTime>CreateTime)'
      

  9.   

    在截个图给大侠看下
    还是不行额
    执行了这一句
    exec GetVideo 26,'AND Not EXISTS(SELECT 1 FROM Video T2 WHERE Passed=1 AND T2.CreateTime>CreateTime)'
      

  10.   

    --try
    CREATE PROCEDURE GetVideo
    (
        @Top int,
        @Strwhere varchar(200)

    AS
    declare @Sql varchar(500)
    set rowcount @Top
    set @Sql='select ID,
                     UserID,
                     Title,
                     Logo,
                     Url,
                     Detail,
                     CreateTime,
                     Passed,
                     Tj,
                     Hit,
                     Dig,
                     Bury 
               from Video t
               where Passed=1 
               and not exists(select 1 
                              from Video
                              where UserID=t.UserID and CreateTime>t.CreateTime) '+@Strwhere
    exec (@Sql)
    GO
      

  11.   

    这个
    exec GetVideo 26,'AND Not EXISTS(SELECT 1 FROM Video T2 WHERE Video.Passed=1 AND T2.CreateTime>Video.CreateTime)'
      

  12.   

    是不是这样exec GetVideo 26,'AND Not EXISTS(SELECT 1 FROM Video T2 WHERE t2.Passed=1 AND T2.CreateTime>Video.CreateTime)'
      

  13.   

    大侠
    可以在不改存储过程的情况下,在where直接加入不?
    而且执行这一句后exec GetVideo1 26,'AND Tj=1'
    会有三个显示额
      

  14.   

    我看你的id不重复,那就这样exec GetVideo 26,'AND Not EXISTS(SELECT 1 FROM Video T2 WHERE t2.Passed=1 AND T2.id>Video.id)' 
     
      

  15.   

    不好意思
    刚显示三个是因为在查询分析器里还有两条语句忘了删了ls大侠
    执行后显示
    第 1 行: 'id' 附近有语法错误。
      

  16.   

    exec GetVideo 26,'AND Not EXISTS(SELECT 1 FROM Video T2 WHERE T2.id>Video.id)'
    大侠,这样写只出现一条数据额,只出现一条UserID=1的数据,其他的没了额
      

  17.   

    select ID,
           UserID,
           CreateTime,
           Passed
    from Video t
    where Passed=1 
          and not exists(select 1 
                         from Video
                         where UserID=t.UserID and CreateTime>t.CreateTime)
    order by id这样的语句,我在查询中抽出的数据是符合楼主的要求的!
      

  18.   


    你是指同一个UserID的记录按时间降序么?
      

  19.   

    或是先按userID分组,取出每组最大的ID,然后not in (最大的ID),就是你想要的结果了,同时也满足时间是最新的一条,如果你的时间也是和ID一样从小到大的话。
      

  20.   

    第一次来,sql版太热情了,加分谢谢各位!