问题描述
我当前面临以下问题:我有1张与此交易经纪人数据类似的表:
delete()
目标是说如果第一个OrderType(TradeId相同的最低ID)是买入,这是LONG Trade ELSE卖空交易...输出应该是这样的:
TickerId Id Ticker Shares OrderType
... ... ... ... ...
01.01.20 ABC 5 ABC 500 Buy
01.01.20 ABC 6 ABC 250 Sell
01.01.20 ABC 7 ABC 250 Sell
... ... ... ... ...
我想念什么?如何构造查询以完成此任务?
谢谢您的关注;)
解决方法
如果要将其添加到所有行,请使用窗口函数。一种方法是:
select t.*,(case when first_value(orderType) over (partition by tickerid order by id) = 'Buy'
then 'Long' else 'Short'
end) as position
from t;
如果每个tickerid
只需要一行,则可以使用聚合:
select tickerid,(case when min(case when orderType = 'Buy' then id end) = min(id)
then 'Long' else 'Short'
end) as position
from t
group by tickerid;
此处的逻辑是将第一个“购买” ID与第一个“ ID”进行比较。如果它们相同,则您有“多头”交易。