Abbandono più record in SQL Server basato su condizione e risultato

0

Domanda

Ho la seguente tabella in 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

Voglio selezionare ultime consult_date per il paziente 1 e generare promemoria. Qui di seguito gli ultimi consult_date è 2021-10-30 ma il problema è che la consultazione è stata cancellata dal costo di consultazione è negativo.

Voglio trascurare questo record così come trascurare il consult_date 2021-05-30, poiché il consultation_cost (10) è simile al negativo del costo di consultazione (-10) che è stata annullata. Così l'ultima consultare la data deve essere 2021-02-08 .

Soluzione si deve trovare il massimo consultazione. Se il costo è positivo che come massimo consultazione. Se è negativo quindi trascurare il record e trascurare il costo simile in valore positivo per il paziente stesso record e prendere la prossima a massimo consultazione.

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

Migliore risposta

1

È possibile utilizzare la SOMMA di oltre partizione di [patient_id] in ordine decrescente, dal [consult_date] e poi trovare la data massima con un valore 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

Output:

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

Mi piace questa idea. Non sappiamo se è possibile avere il nuovissimo righe con valori di -10, 5, 5 o -10, 5, 15 e come trattare con questi casi, ma le soluzioni sembra anche opportuno che tali scenari speciali.
Thorsten Kettner

@Thorsten Kettner Grazie per la valutazione positiva.
Anton Grig

In altre lingue

Questa pagina è in altre lingue

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