El abandono de varios registros en SQL Server basado en la condición y producir el resultado

0

Pregunta

Tengo la siguiente tabla en SQL Server:

consult_date patient_id consultation_cost
-----------------------------------------
2021-10-30    1           -10
2021-05-30    1            10
2021-02-08    1            20
2021-01-27    1            22

Quiero seleccione último consult_date para el paciente 1 y generar recordatorios. Aquí la última consult_date es 2021-10-30 pero el problema es que la consulta ha sido cancelado ya que la consulta costo es negativo aquí.

Quiero descuidar este registro así como el abandono de la consult_date 2021-05-30 así desde el consultation_cost (10) es similar a la negativa de consulta costo (-10), que ha sido cancelada. Por lo tanto la última consultar la fecha debe ser 2021-02-08 .

Solución se debe encontrar el máximo de la fecha de consulta. Si el costo es positiva, entonces tomar eso como máximo fecha de consulta. Si es negativa, entonces el abandono de ese registro y el descuido del costo similar en valor positivo para el mismo registro del paciente y tome la siguiente máxima fecha de consulta.

common-table-expression sql sql-server
2021-11-19 09:16:07
1

Mejor respuesta

1

Usted puede utilizar la SUMA de más de partición de [patient_id] en orden descendente por [consult_date] y, a continuación, encontrar la fecha máxima con un valor positivo.

Select patient_id, Max(consult_date) As consult_date
From (
Select consult_date, patient_id, SUM(consultation_cost) Over (Partition by patient_id Order by consult_date Desc) As Agg
From Tbl) As T
Where Agg>0
Group by patient_id

Salida:

patient_id  consult_date
----------- ------------
1           2021-02-08
2021-11-19 09:40:59

Me gusta esta idea. No sabemos si es posible tener la más reciente de las filas con valores de -10, 5, 5, -10, 5, 15 y cómo lidiar con este tipo de casos, pero sus soluciones parece incluso apropiados para tales situaciones especiales.
Thorsten Kettner

@Thorsten Kettner Gracias por la valoración positiva.
Anton Grig

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................