zoukankan      html  css  js  c++  java
  • 带附加条件的NewID()用法

    前天碰到一业务需求,难倒了团队成员,

    表结构如下:

    CREATE TABLE [dbo].[Product](
        
    [P_ID] [bigint] IDENTITY(1,1NOT NULL,
        
    [P_Name] [nvarchar](255NULL,
        
    [CategoryID1] [int] NULL,
        
    [CategoryID2] [int] NULL,

        [CategoryID3] [int] NULL,

          [P_SingleIntro] [nvarchar](200NULL,

        [LoginID] [nvarchar](50NULL,

     
    CONSTRAINT [PK_Product] PRIMARY KEY CLUSTERED 
    (
        
    [P_ID] ASC
    )

    需要随机列出表中每位用户(loginid)的一个产品,每次列出时随机值不重复。

    于是考虑用newid()

    select max(P_ID)as P_ID,loginID from product
    group by loginid order by NewID()

     结果每次取到的P_ID都是相同的! 不符合需求

    再修改如下:

    select P_ID,LoginID,P_Name,P_SingleIntro from product where P_ID in
    (
    select ( select top 1 p_id from product as b where b.loginid = c.loginid order by newid() ) as p_id 
    from ( select top 10000 a.loginID from product as a group by a.loginid order by NewID() ) as c 
    )
    --假定取前10000个用户

    OK!!!!(就是性能寒碜了点!^_^)

     感谢尘尘
    在SQL 2005/2008下可以这么做。

    代码
    select P_ID,LoginID,P_Name,P_SingleIntro 
    from (select P_ID,LoginID,P_Name,P_SingleIntro,
    ROW_NUMBER() 
    over(partition by loginID order by new) rn from (select *,NEWID() new from Product) as temp
    te 
    where rn=1 and LoginID is not null and Len(loginID)>0
    order by loginid  asc
    邀月注:本文版权由邀月和博客园共同所有,转载请注明出处。
    助人等于自助!  3w@live.cn
  • 相关阅读:
    jQuery(jquery ui,jquery plugins)插件笔记1
    怎样批量删除.svn文件
    js中传递参数为0开头的数字时候,存在转码的问题
    struts文件上传,获取文件名和文件类型
    Log4j配置
    怎样通过CSS控制input输入框有readonly属性的背景色
    EXECUTE IMMEDIATE
    row_number() over(partition by column1 order by column2 desc) rn 用法
    React概述
    Web前端,高性能优化
  • 原文地址:https://www.cnblogs.com/downmoon/p/1251730.html
Copyright © 2011-2022 走看看