Пренебрегайте несколькими записями в SQL Server на основе условия и приведите к результату

0

Вопрос

У меня есть следующая таблица в 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

Я хочу выбрать последнюю дату консультации для пациента 1 и сгенерировать напоминания. Здесь последняя дата консультации-2021-10-30, но проблема в том, что консультация была отменена, так как стоимость консультации здесь отрицательная.

Я хочу пренебречь этой записью, а также пренебречь датой консультации 2021-05-30, так как стоимость консультации (10) аналогична отрицательной стоимости консультации (-10), которая была отменена. Таким образом, последняя дата консультации должна быть 2021-02-08 .

Решение должно заключаться в том, чтобы найти максимальную дату консультации. Если стоимость положительна, то примите это за максимальную дату консультации. Если он отрицательный, то пренебрегите этой записью и пренебрегите аналогичной стоимостью в положительном значении для той же записи о пациенте и назначьте следующую максимальную дату консультации.

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

Лучший ответ

1

Вы можете использовать СУММУ по разделению по [patient_id] в порядке убывания по [consult_date], а затем найти максимальную дату с положительным значением.

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

Выход:

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

Мне нравится эта идея. Мы не знаем, возможно ли иметь самые новые строки со значениями -10, 5, 5 или -10, 5, 15 и как поступать в таких случаях, но ваши решения кажутся даже подходящими для таких особых сценариев.
Thorsten Kettner

@Торстен Кеттнер Благодарю вас за положительную оценку.
Anton Grig

На других языках

Эта страница на других языках

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

Популярное в этой категории

Популярные вопросы в этой категории