es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Tengo que unir dos tablas diferentes, sym33 y sym, y luego verificar la diferencia entre la fecha de servicio máxima (max svcdate) y la fecha de servicio mínima (min svcdate), la cual debería ser mayor a 90 días.

crear tabla temporal sand_scipher_ds_db.public.Rf como (
seleccionar PATIENTID, max(SVCDATE)-min(SVCDATE) como days de symphony_hvh_db.sym33.dx

union all

seleccionar PATIENTID, max(SVCDATE)-min(SVCDATE) como days de symphony_hvh_db.sym.dx
agrupar por PATIENTID
teniendo days>90
limite 100
);
seleccionar * de sand_scipher_ds_db.public.Rf limite 100

error:
Error de compilación SQL: [DX.PATIENTID] no es una expresión válida para agrupar por

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución:

    El mensaje de error indica que la columna DX.PATIENTID no es una expresión válida para agrupar. En la segunda declaración select de la consulta, la cláusula group by se utiliza para agrupar los resultados por la columna PATIENTID. Sin embargo, parece que la columna no está presente en la tabla DX. Para solucionar este error, debes asegurarte de utilizar los nombres de tabla y columna correctos en la consulta.

    También es importante tener en cuenta que la cláusula union all se utiliza para combinar los resultados de dos declaraciones select. La primera declaración select no tiene una cláusula group by, por lo que devolverá la fecha máxima y mínima (SVCDATE) para todos los pacientes. La segunda declaración select tiene una cláusula group by en la columna PATIENTID, por lo que devolverá la fecha máxima y mínima (SVCDATE) para cada paciente por separado, pero solo para aquellos pacientes que tengan una diferencia de más de 90 días.

    Finalmente, la cláusula limit 100 se utiliza para limitar el conjunto de resultados a las primeras 100 filas.

    Para solucionar el error, debes asegurarte de utilizar los nombres de tabla y columna correctos en la consulta. Por ejemplo:

    create temporary table sand_scipher_ds_db.public.Rf as (
      select PATIENTID, max(SVCDATE)-min(SVCDATE) as días from symphony_hvh_db.sym33.dx
      group by PATIENTID
    
      union all
    
      select PATIENTID, max(SVCDATE)-min(SVCDATE) as días from symphony_hvh_db.sym.dx
      where días > 90
      group by PATIENTID
      limit 100
    );
    select * from sand_scipher_ds_db.public.Rf limit 100
    

    En esta consulta actualizada, la cláusula group by se utiliza solo en la primera declaración select, y se utiliza la cláusula where en la segunda declaración select para filtrar los resultados. Además, la cláusula having se ha reemplazado por la cláusula where, ya que días no es un nombre de columna válido para utilizar en la cláusula having.

    Ten en cuenta que esto es solo un ejemplo, y debes asegurarte de que los nombres de tabla y columna sean correctos para tu escenario específico. Además, ten en cuenta cualquier implicación de rendimiento al utilizar tablas temporales y limitar los conjuntos de resultados.

Comments are closed.