【问题标题】:SQL Random Item for each USER每个用户的 SQL 随机项
【发布时间】:2015-08-05 18:00:59
【问题描述】:

我一直在寻找,但找不到正确的方法。在下面的查询中,我需要的是每个 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'

【问题讨论】:

    标签: sql random


    【解决方案1】:

    创建一个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 表的过滤器

    【讨论】:

    • 那么在我的 where 子句中会是另一个吗?
    • 我已经这样做了,但是,我没有得到一些用户的返回,而一些用户的我得到了多个结果。
    猜你喜欢
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    • 2018-06-25
    相关资源
    最近更新 更多