SQL Server附加数据来自MAX值

时间:2016-08-01 04:22:07

标签: sql-server group-by max min

我有查询,我将其重命名为“Resultados”,此查询的输出为:

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

查询的输出是:

Output

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

Expected Output

3 个答案:

答案 0 :(得分:0)

    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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

试试这个,

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