忽视多的记录在SQL服务器基础上的条件和产生的结果

0

的问题

我有以下表SQL服务器:

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

我想要选择最新的consult_date为病人1和产生的提醒。 这里的最新consult_date是2021-10-30但问题是协商已被取消,因为协商的成本是负面的这里。

我想要忽视这一记录以及忽视的consult_date2021-05-30以及由于consultation_cost(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

@Thorsten Kettner谢谢你的积极评估。
Anton Grig

其他语言

此页面有其他语言版本

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