Zanedbávání více záznamů v systému SQL Server na základě stavu a produkovat výsledek

0

Otázka

Mám následující tabulky v serveru 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

Chci vybrat poslední consult_date pro pacienta 1 a vytvořit připomenutí. Tu nejnovější consult_date je 2021-10-30 ale problém je, že konzultace byla zrušena od konzultace cena je negativní.

Chci zanedbávat tento záznam, jakož i zanedbávání consult_date 2021-05-30 stejně od consultation_cost (10) je podobné negativní konzultace náklady (-10), který byl zrušen. Takže poslední poraďte datum by mělo být 2021-02-08 .

Řešení by mělo být najít maximální konzultace datum. Je-li cena je pozitivní, pak se to brát jako maximální konzultace datum. Pokud je negativní, pak zanedbávání, které zaznamenávají a zanedbávání podobné náklady v pozitivní hodnoty u stejného pacienta záznam a další maximální konzultace datum.

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

Nejlepší odpověď

1

Můžete použít SOUČET přes oddíl [patient_id] v sestupném pořadí podle [consult_date] a pak najít maximální rande s pozitivní hodnotou.

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

Výstup:

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

Líbí se mi tento nápad. Nevíme, zda je možné mít nejnovější řádků s hodnotami -10, 5, 5 nebo -10, 5, 15 a, jak se vypořádat s takovými případy, ale vaše řešení se zdá vhodné i pro takové speciální scénáře.
Thorsten Kettner

@Thorsten Kettner Děkuji za pozitivní hodnocení.
Anton Grig

V jiných jazycích

Tato stránka je v jiných jazycích

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