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
  • 相关阅读:
    mariadb数据库galera群集配置
    视频降噪处理
    测试
    WPF RichTextBox
    WPF ListBox
    WPF SelectedIndex
    项目-答题
    Show 或者 ShowDialog时出现的错误
    项目-数据库实体生成器
    Alfred 使用教程
  • 原文地址:https://www.cnblogs.com/downmoon/p/1251730.html
Copyright © 2011-2022 走看看