我在SQL中有一个要求,我需要根据另一列中的最小值得出该值。
在此示例中,我们可以看到最低金额为4,900,000.00,而此金额的原始货币为GBP。因此,仅此行的LowestCurrency的值应设置为GBP。然后将其他行设置为UNK。
是否有任何窗口函数可以帮助实现这一目标?我尝试了FIRST_VALUE,但无法将其他“非合格”行设置为UNK。
预期输出为:
OriginalCurrency LowestCurrency Reference Amount
GBP GBP 2000001/001/18 4,900,000.00
EUR UNK 2000001/001/18 7,500,000.00
USD UNK 2000001/001/18 10,000,000.00
GBP UNK 2000002/001/18 5,000,000.00
EUR EUR 2000002/001/18 1,000,000.00
USD UNK 2000002/001/18 9,000,000.00
此处的代码示例:
select *
from (values
('GBP','GBP','2000001/001/18',4900000)
,('EUR','UNK','2000001/001/18',7500000)
,('USD','UNK','2000001/001/18',10000000)
,('GBP','UNK','2000002/001/18',5000000)
,('EUR','EUR','2000002/001/18',1000000)
,('USD','UNK','2000002/001/18',9000000)) t
(
OriginalCurrency,
LowestCurrency,
Reference,
Amount
)
答案 0 :(得分:0)
您可以使用条件逻辑。如果我理解正确:
<Link to={`/${variable}`}>
<your code>
</Link>
如果可以为最低价设置平局,则可以使用select t.*,
(case when row_number() over (partition by reference order by amount) = 1
then OriginalCurrency
else 'UNK'
end) as LowestCurrency
from t;
代替rank()
。
答案 1 :(得分:0)
select
...,
case when amount = select min(amount) from t1 then OriginalCurrency
else 'UNK'
end as OriginalCurrency
from t1