帶附加條件的NewID 用法

2022-01-31 23:35:44 字數 1948 閱讀 1625

前天碰到一業務需求,難倒了團隊成員,

表結構如下:

create

table

[dbo].

[product](

[p_id][

bigint

]identity(1

,1) not

null

,[p_name][

nvarchar](

255) 

null

,[categoryid1][

int]

null

,[categoryid2][

int]

null

,[categoryid3][

int]

null,[

p_singleintro][

nvarchar](

200) 

null

,[loginid][

nvarchar](

50) 

null

,constraint

[pk_product

]primary

keyclustered

([p_id

]asc

)需要隨機列出表中每位使用者(loginid)的乙個產品,每次列出時隨機值不重複。

於是考慮用newid()

select

max(p_id)

asp_id,loginid 

from

product

group

byloginid 

order

bynewid

()結果每次取到的p_id都是相同的! 不符合需求

再修改如下:

select

p_id,loginid,p_name,p_singleintro 

from

product 

where

p_id in(

select

( select

top1

p_id 

from

product 

asb 

where

b.loginid 

=c.loginid 

order

bynewid

() ) 

asp_id 

from

( select

top10000

a.loginid 

from

product 

asa 

group

bya.loginid 

order

bynewid

() ) 

asc 

)--假定取前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 

byloginid 

order

bynew) rn 

from

(select*,

newid

() new 

from

product) 

astemp

) te 

wherern=

1and

loginid 

isnot

null

andlen

(loginid)

>

0order

byloginid  

asc

帶附加條件的NewID 用法 downmoon

前天碰到一業務需求,難倒了團隊成員,表結構如下 create table dbo product p id bigint identity 1 1 not null p name nvarchar 255 null categoryid1 int null categoryid2 int null ...

帶附加條件的NewID 用法 downmoon

前天碰到一業務需求,難倒了團隊成員,表結構如下 table dbo product p id bigint identity 1 1 not null p name nvarchar 255 null categoryid1 int null categoryid2 int null categor...

帶附加條件的NewID 用法 downmoon

前天碰到一業務需求,難倒了團隊成員,表結構如下 table dbo product p id bigint identity 1 1 not null p name nvarchar 255 null categoryid1 int null categoryid2 int null categor...