Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 具有多个联接和子查询的最新记录值_Sql_Sql Server - Fatal编程技术网

Sql 具有多个联接和子查询的最新记录值

Sql 具有多个联接和子查询的最新记录值,sql,sql-server,Sql,Sql Server,我正在使用MS SQL Server 2016。我试图用row_number函数获取最近的测量值,但仍然获取多个记录,而不是最近的测量值。我有点超出了我的SQL舒适区,非常感谢您的帮助。是否可以在子查询中使用row_number函数 SELECT DISTINCT V_PAT_FACT.PAT_ID, V_PAT_FACT.PAT_NAME, CAST(PATIENT.BIRTH_DATE as date) "BIRTH DATE", V_PAT_F

我正在使用MS SQL Server 2016。我试图用row_number函数获取最近的测量值,但仍然获取多个记录,而不是最近的测量值。我有点超出了我的SQL舒适区,非常感谢您的帮助。是否可以在子查询中使用row_number函数

SELECT
    DISTINCT 
    V_PAT_FACT.PAT_ID,
    V_PAT_FACT.PAT_NAME, 
    CAST(PATIENT.BIRTH_DATE as date) "BIRTH DATE", 
    V_PAT_FACT.SEX_NAME as "GENDER", 
    V_PAT_FACT.CUR_PCP_NAME, 
    V_PAT_FACT.PAT_MRN_ID, 
    CAST(DATEADD(d,CAST(fmid7947.MEAS_VALUE as NUMERIC),'12/31/1840') as DATE) "RESTART DATE",
    CAST(DATEADD(d,CAST(fmid7948.MEAS_VALUE as NUMERIC),'12/31/1840') as DATE) "INITIAL DATE",
    FLOOR(CAST(LEFT(CAST(fmid7739.MEAS_VALUE as numeric), 4) AS numeric (8,3))/16) "INIT GOAL WT",
    FLOOR(CAST(LEFT(CAST(fmid7912.MEAS_VALUE as numeric), 4) AS numeric (8,3))/16) "INIT RESTART WT",
    fmid8794.MEAS_VALUE "TGT MAINT WT",
    FLOOR(CAST(fmid14.MEAS_VALUE as numeric(8,3))/16) "WT LBS",
    fmidBMI.MEAS_VALUE as "BMI",
    FLOOR(CAST(LEFT(CAST(fmid8796.FSD_ID as numeric), 4) AS numeric (8,3))/16)"TOTAL LOSS",
    fmid7752.MEAS_VALUE as "BARIATRIC MED"

FROM
    V_PAT_FACT V_PAT_FACT
    LEFT  OUTER JOIN PATIENT        ON V_PAT_FACT.PAT_ID = PATIENT.PAT_ID
    INNER JOIN       IP_FLWSHT_REC  ON V_PAT_FACT.PAT_ID = IP_FLWSHT_REC.PAT_ID 
    INNER JOIN       IP_FLWSHT_MEAS ON
        IP_FLWSHT_REC.FSD_ID = IP_FLWSHT_MEAS.FSD_ID 
        AND
        IP_FLWSHT_MEAS.FLT_ID = '343'
        AND
        IP_FLWSHT_MEAS.FLO_MEAS_ID IN ( '7947', '7948', '7739', '7912', '8794', '8481', '14', '301070', '8796','7752' )
    INNER JOIN       IP_FLO_GP_DATA ON IP_FLWSHT_MEAS.FLO_MEAS_ID = IP_FLO_GP_DATA.FLO_MEAS_ID
    LEFT OUTER JOIN
    (
        SELECT
            DISTINCT
            mes.FLO_MEAS_ID,
            mes.MEAS_VALUE,
            vp.PAT_ID,
            rsdate.MEAS_VALUE AS "something"
        FROM
            PAT_ENC vp
            INNER JOIN IP_FLWSHT_REC rec on vp.PAT_ID=rec.PAT_ID
            INNER JOIN IP_FLWSHT_MEAS mes on rec.FSD_ID=mes.FSD_ID
            INNER JOIN (
                SELECT
                    m.*,
                    row_number() over (partition by FSD_ID  Order by ENTRY_TIME desc) as rn
                FROM
                    IP_FLWSHT_MEAS m
                WHERE
                    M.FLO_MEAS_ID = '7948'
            ) rsdate ON mes.FSD_ID = rsdate.FSD_ID
        WHERE
            mes.FLO_MEAS_ID ='7948'
    ) fmid7948 ON V_PAT_FACT.PAT_ID = fmid7948.PAT_ID

您定义了一个行号(在子选择中工作得非常好),但我不知道您在哪里使用它。仅仅添加一个行号列并不能神奇地完成任何事情,只能添加一个列供您在过滤器中使用。您可能还想研究公共表表达式(CTE),它们是语法上的糖分,使子选择更易于阅读。那个查询有点像维护噩梦。哈哈哈。。。谢谢你,鲍斯汀。这绝对是噩梦。。。我自己也很讨厌它,但我不需要维护它。只需要获取数据,将其放入Crystal命令对象中。我查看了CTE,但无法在sub中正确格式化。我在Where子句中添加了筛选器rn=1。。。。然而,当mes.FLO_表示ID='7948'和rn=1时,变化不大。一些记录在多个时间条目中拉入,而它们本应只拉入一个时间条目。