MSSQL – Random i gropu by koristeći cross apply

Problem :

imamo 10 apartmana , za svaki apartman imamo po 5 slika… potrebno je selektirati po jednu random sliku za svaki od apartmana. S obzirom da group by traži agregatnu funkciju kod selekcije, korištenje Min(image_url) kod selecta će uvijek vraćati istu sliku, onu koja je Min.

 

Rješenje:


select
 MIN(A.id) AS slika_id,
 A.obj_id,
 dtbl.image_url
from
 tbl_slike A
 cross apply
 (select TOP 1 image_url, obj_id
 from tbl_slike B
 WHERE B.obj_id = A.obj_id
 order by newid()
 ) dtbl
group by A.obj_id, dtbl.image_url

Comments are closed.