【问题标题】:SQL Server additional data from MAX valueSQL Server 来自 MAX 值的附加数据
【发布时间】:2016-08-01 04:22:06
【问题描述】:

我有一个查询,我重命名为“Resultados”,这个查询的输出是这样的:

然后我有一个查询,它返回“Resultados”中按字段 GEN_idMedicamento_Arsenal、GEN_idPaciente 和 GroupID 分组的连续日期的开始日期和结束日期

SELECT  GEN_idMedicamento_Arsenal,
        GEN_idPaciente, 
        GroupID,
        Inicio = MIN(HOS_fecha_recetaReceta_Indicaciones),
        Fin = MAX(HOS_fecha_recetaReceta_Indicaciones),
        Dias= DATEDIFF(DAY, MIN(HOS_fecha_recetaReceta_Indicaciones), MAX(HOS_fecha_recetaReceta_Indicaciones)) + 1
FROM Resultados
GROUP BY GEN_idMedicamento_Arsenal, GEN_idPaciente, GroupID

查询的输出是这样的:

这个输出是正确的,但我需要其他我不能放在 group by 子句中的字段,例如,我需要我重命名为“Fin”的 MAX(date) 行的字段 GEN_nombreCama、HOS_diagnostico_principalReceta_Indicaciones,在这种情况下,预期的输出是这样的:

【问题讨论】:

    标签: sql-server group-by max min


    【解决方案1】:
    SELECT GEN_idMedicamento_Arsenal
        ,GEN_idPaciente
        ,GroupID
        ,Inicio
        ,Fin
        ,Dias = DATEDIFF(DAY, Inicio, Fin) + 1
        ,GEN_nombercama
        ,HOS_diagnostico_principalReceta_Indicaciones
    FROM Resultados
    FROM (
        SELECT DISTINCT GEN_idMedicamento_Arsenal
            ,GEN_idPaciente
            ,GroupID
            ,Inicio = MIN(HOS_fecha_recetaReceta_Indicaciones) OVER (
                ORDER BY GEN_idMedicamento_Arsenal
                    ,GEN_idPaciente
                    ,GroupID
                )
            ,Fin = MAX(HOS_fecha_recetaReceta_Indicaciones) OVER (
                ORDER BY GEN_idMedicamento_Arsenal
                    ,GEN_idPaciente
                    ,GroupID
                )
            ,GEN_nombercama
            ,HOS_diagnostico_principalReceta_Indicaciones
        FROM Resultados
        ) a
    

    【讨论】:

    • 现在我有了额外的字段,但 "Inicio","Fin","Dias" 的值仍然是错误的
    【解决方案2】:
        SELECT DISTINCT GEN_idMedicamento_Arsenal
            ,GEN_idPaciente
            ,GroupID
            ,Inicio = MIN(HOS_fecha_recetaReceta_Indicaciones) OVER (
                ORDER BY GEN_idMedicamento_Arsenal
                    ,GEN_idPaciente
                    ,GroupID
                )
            ,Fin = MAX(HOS_fecha_recetaReceta_Indicaciones) OVER (
                ORDER BY GEN_idMedicamento_Arsenal
                    ,GEN_idPaciente
                    ,GroupID
                )
            ,Dias = DATEDIFF(DAY, MIN(HOS_fecha_recetaReceta_Indicaciones) OVER (
                    ORDER BY GEN_idMedicamento_Arsenal
                        ,GEN_idPaciente
                        ,GroupID
                    ), MAX(HOS_fecha_recetaReceta_Indicaciones) OVER (
                    ORDER BY GEN_idMedicamento_Arsenal
                        ,GEN_idPaciente
                        ,GroupID
                    )) + 1
    ,,GEN_nombercama
            ,HOS_diagnostico_principalReceta_Indicaciones
        FROM Resultados
    

    【讨论】:

    • 我在测试你的回答,但不是我需要的输出,我需要的额外字段丢失并且“Inicio”、“Fin”、“Dias”的值是错误的
    【解决方案3】:

    试试这个,

    SELECT 
        r1.GEN_idMedicamento_Arsenal,
        r1.GEN_idPaciente,
        r1.GroupID,
        r1.GEN_idMedicamento_Arsenal, 
        r1.GEN_idPaciente,
        r2.Inicio,
        r2.Fin,
        r2.Dias
    FROM Resultados r1
    INNER JOIN (SELECT  GEN_idMedicamento_Arsenal,
                        GEN_idPaciente, 
                        GroupID,
                        Inicio = MIN(HOS_fecha_recetaReceta_Indicaciones),
                        Fin = MAX(HOS_fecha_recetaReceta_Indicaciones),
                        Dias= DATEDIFF(DAY, MIN(HOS_fecha_recetaReceta_Indicaciones), MAX(HOS_fecha_recetaReceta_Indicaciones)) + 1
                FROM Resultados
                GROUP BY GEN_idMedicamento_Arsenal, GEN_idPaciente, GroupID
                ) AS r2 ON r1.GEN_idMedicamento_Arsenal = r2.GEN_idMedicamento_Arsenal
                    AND r1.GEN_idPaciente = r2.GEN_idPaciente
                    AND r1.GroupID = r2.GroupID
                    AND r1.HOS_fecha_recetaReceta_Indicaciones = r2.Fin
    

    【讨论】:

    • 您好,这可行,但我将使用数据库中的更多数据测试此查询,看看效率如何,谢谢!!
    猜你喜欢
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多