前天碰到一業務需求,難倒了團隊成員,
表結構如下:
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...