[英]conditional filtering based on multiple columns in sql
我有一个包含以下列和数据的表:
ID NAME Amount Date
53 GSG -2,695,190,307.57 1/22/2018
53 GSG -2,698,190,307.57 1/23/2018
77 GSG -2,508,853,140.14 1/22/2018
77 GSG -2,508,303,140.14 1/23/2018
76 GSG -2,479,894,820.77 1/23/2018
53 MLG -2,443,081,761.81 1/23/2018
53 MLG -2,405,497,472.79 1/22/2018
67 GSG -2,164,848,916.29 1/23/2018
66 GSG -2,160,447,589.23 1/22/2018
66 GSG -2,160,447,589.23 1/23/2018
76 MLG -2,147,093,992.33 1/23/2018
我正在寻找的输出是每当我们有两个连续的日期用于特定情况时,我们需要比较金额,并且对于每个日期我们都具有最大金额,我想将该记录显示为结果。 预期结果集应如下所示:
ID NAME Amount Date
53 GSG -2,698,190,307.57 1/23/2018
77 GSG -2,508,853,140.14 1/22/2018
76 GSG -2,479,894,820.77 1/23/2018
53 MLG -2,443,081,761.81 1/23/2018
67 GSG -2,164,848,916.29 1/23/2018
66 GSG -2,160,447,589.23 1/22/2018
76 MLG -2,147,093,992.33 1/23/2018
我尝试了case语句,这是我拥有的SQL:
select hdc1.ID, hdc1.name,
case when hdc1.amount < hdc2.amount
then hdc1.amount
else hdc2.amount
end as Final_amount,
Case when hdc1.amount < hdc2.amount
then hdc1.date
else hdc2.date
end as forecast_date,
from Hori_dmnd_cmo hdc1, Hori_dmnd_cmo hdc2
where hdc1.date = date(hdc2.date - 1 day)
and hdc1.id = hdc2.id
and hdc1.name = hdc2.name
你的逻辑似乎是正确的轨道上,但我会用join
代替,
-你得到取最小值,而不是最大值。
这是您想要的吗?
select hdc1.ID, hdc1.name,
(case when hdc1.amount >= hdc2.amount
then hdc1.amount
else hdc2.amount
end) as Final_amount,
(case when hdc1.amount >= hdc2.amount
then hdc1.date
else hdc2.date
end) as forecast_date,
from Hori_dmnd_cmo hdc1 join
Hori_dmnd_cmo hdc2
on hdc1.date = (hdc2.date - 1 day) and
hdc1.id = hdc2.id
hdc1.name = hdc2.name
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.