每个USER的SQL Random Item

时间:2015-08-05 18:00:59

标签: sql random

我一直在寻找,找不到正确的方法来做到这一点。在下面的查询中,我需要的是每个U.USER_K的一个随机C.CREDENTIALING_K。我知道newid()将在某个地方需要,我找不到合适的位置。

select 
    U.USER_K,
    U.FULLNAME as 'Chg_By',
    CONVERT(DATE,AL.AUDITDATETIME) as 'Verif_Date',
    P.ID,
    P.LONGNAME,
    CONVERT(DATE,P.DATEOFBIRTH) as 'DOB',
    C.entity_k,
    R.DESCRIPTION as 'CVI_TYPE',
    C.CREDENTIALING_K,
    CG.GROUPDESCRIPTION,
    C.APPLICATION_RECEIVED,
    R1.DESCRIPTION as 'Cur_STATUS',
    CONVERT(DATE,C.USERDEF_D3) as 'MSO_DUE_DT'
from
    VisualCACTUS.AUDITLOG AL
        JOIN VisualCACTUS.USERS U
        on U.user_k = AL.USER_K
        join VisualCACTUS.CREDENTIALING C
            JOIN VisualCACTUS.PROVIDERS P
            on P.provider_k = C.PROVIDER_K
            JOIN visualcactus.CREDENTIALINGGROUP CG
            on CG.CREDENTIALINGGROUP_K = C.CREDENTIALINGGROUP_K
            JOIN VisualCACTUS.REFTABLE R
            on R.reftable_k = CG.TYPE_RTK
            JOIN VisualCACTUS.REFTABLE R1
            ON R1.REFTABLE_K = C.CREDENTIALINGSTATUS_RTK
            --JOIN VisualCACTUS.CREDENTIALINGASSIGNMENTS CA
            --on CA.credentialing_k = CA.credentialing_k
        on C.CREDENTIALING_K = AL.FILE_PRIMARYKEY
where
    AUDITLOG_K in (select AUDITLOG_K from VisualCACTUS.AUDITLOG_RECORDLEVEL where TABLE_NAME = 'CREDENTIALING                 ' 
                    and
                    AUDITLOG_RECORDLEVEL_K in (SELECT AUDITLOG_RECORDLEVEL_K from VisualCACTUS.AUDITLOG_FIELDLEVEL where NEWVALUE_SHORT = 'D2680X38F3'))
    and
    C.USERDEF_L1 = 0
    and 
    CG.TYPE_RTK NOT IN ('D2870MPPSO','D2LC0YR0AR','D2DD1EIY5X')
    and
    CG.TYPE_RTK NOT LIKE ('SSP%')
    and
    C.credentialing_k not in (select credentialing_k from VisualCACTUS.CREDENTIALINGASSIGNMENTS where EA_K in (select ea_k from visualcactus.entityassignments where entity_k in ('HCA0000039',
'HCA0000040',
'HCA0000041',
'HCA0000043',
'HCA0000096',
'HCA0000095',
'HCA0000337',
'HCA0000903',
'HCA0000904',
'HCA0000905',
'HCA0000906',
'HCA0000080')))
    and
    CONVERT(DATE, AUDITDATETIME) = DATEADD(day, -1, convert(date, GETDATE()))
order by 'Chg_By'

1 个答案:

答案 0 :(得分:0)

correlated subquery返回随机CREDENTIALING_K

CREDENTIALING_K=(select top 1 C1.CREDENTIALING_K
                 from VisualCACTUS.CREDENTIALING c1 
                 Where P.provider_k = C1.PROVIDER_K
                 order by newid())

注意:如果需要,也可以在子查询中添加用于VisualCACTUS.CREDENTIALING表的过滤器