Neglijarea mai multe înregistrări în SQL Server bazat pe starea și să producă rezultatul

0

Problema

Am următorul tabel în 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

Vreau pentru a selecta mai recente consult_date pentru pacient 1 și de a genera memento-uri. Aici cele mai recente consult_date este 2021-10-30 dar problema este de consultare a fost anulat de consultare costul este negativ aici.

Vreau să neglijeze această înregistrare precum și neglijeze consult_date 2021-05-30, precum și de la consultation_cost (10) este similar cu negative consultare cost (-10), care a fost anulat. Astfel încât cele mai recente consulte data ar trebui să fie 2021-02-08 .

Soluția ar trebui să fie de a găsi maximă de consultare data. Dacă costul este pozitiv atunci iau ca maxim de consultare data. Daca este negativ, atunci neglija acest record și neglijare, cu costuri similare in valoare pozitivă pentru același pacient să înregistreze și să ia următoarea maximă de consultare data.

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

Cel mai bun răspuns

1

Puteți utiliza SUMA de peste partiție de [patient_id], în ordinea descrescătoare a [consult_date] și apoi găsi maxim data cu o valoare pozitivă.

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

Ieșire:

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

Îmi place această idee. Nu știm dacă este posibil să aveți cel mai nou rândurile cu valori de -10, 5, 5, -10, 5, 15 și cum să se ocupe cu astfel de cazuri, dar soluții se pare chiar potrivit pentru astfel de scenarii speciale.
Thorsten Kettner

@Thorsten Kettner Mulțumesc pentru apreciere pozitivă.
Anton Grig

În alte limbi

Această pagină este în alte limbi

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