Negligência vários registros no SQL Server com base na condição e produzir resultado

0

Pergunta

Eu tenho a seguinte tabela no 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

Eu quero selecione mais recente consult_date para o paciente 1 e gerar lembretes. Aqui o mais recente consult_date é 2021-10-30 mas o problema é que a consulta foi cancelada desde a consulta de custo é negativo aqui.

Eu quero negligenciar este registo, bem como a negligência, a consult_date 2021-05-30 bem desde o consultation_cost (10) é semelhante ao negativo de consulta de custo (-10), que foi cancelado. Então, o mais recente consultar a data deve ser 2021-02-08 .

A solução deve ser encontrar o máximo de consulta data. Se o custo for positivo, então toma-o como consulta ao máximo a data. Se for negativo, em seguida, a negligência que o registro e a negligenciar os custos semelhantes em valor positivo para o mesmo paciente e tome a próxima consulta ao máximo a data.

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

Melhor resposta

1

Você pode usar SOMA mais de partição de [patient_id] em ordem decrescente por [consult_date] e, em seguida, encontrar a data máxima com um 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

Saída:

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

Eu gosto desta idéia. Não sabemos se é possível ter os mais recentes linhas com valores de -10, 5, 5 ou -10, 5, 15 e como lidar com estes casos, mas as suas soluções, parece ainda apropriado para tais cenários especiais.
Thorsten Kettner

@Thorsten Kettner Obrigado pela avaliação positiva.
Anton Grig

Em outros idiomas

Esta página está em outros idiomas

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