前天碰到一業務需求,難倒了團隊成員,
表結構如下:
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下可以這麼做。
助人等於自助! [email protected]
帶附加條件的NewID 用法
前天碰到一業務需求,難倒了團隊成員,表結構如下 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...