J'ai une table de transactions comprenant la date, l'heure, le symbole, le volume, le volume de la vente aux enchères de fermeture.
Malheureusement, le volume de vente aux enchères est inclus dans la dernière poubelle de la table et pour compliquer les choses qu'elle peut survenir à 15 : 59: 00 ou à 12:59:00 pendant des demi-journées. p>
existe-t-il un moyen de mettre à jour conditionnellement le volume pour supprimer le volume de fermeture? P>
Par exemple, retirez-le du volume de 15: 59: 00 s'il existe, sinon le retirez du volume de 12: 59: 00. p>
par exemple p> Je voudrais être p> t:([]date:2019.02.01 2019.02.01 2019.02.02 2019.02.02 2019.02.02 2019.02.02 2019.02.01 2019.02.01;time:12:59:00 15:59:00 12:59:00 15:59:00 12:59:00 15:59:00 12:59:00 15:59:00;sym:`AAPL`AAPL`AAPL`AAPL`BAC`BAC`BAC`BAC;volume:100 25000 26000 0 20000 12000 13000 0; closingvol: 24000 24000 21000 21000 11000 11000 12000 12000)
t:`date`time xasc t
update volume:volume-closingvol from t where (time=15:59:00)|(time=12:59:00), volume>=closingvol
**date**|**time**|**sym**|**volume**|**closingvol**
:-----:|:-----:|:-----:|:-----:|:-----:
2019-02-01|12:59:00|AAPL|100|24000
2019-02-01|12:59:00|BAC|1000|12000
2019-02-01|15:59:00|AAPL|1000|24000
2019-02-01|15:59:00|BAC|0|12000
2019-02-02|12:59:00|AAPL|5000|21000
2019-02-02|12:59:00|BAC|9000|11000
2019-02-02|15:59:00|AAPL|0|21000
2019-02-02|15:59:00|BAC|1000|11000
3 Réponses :
Pour le moment, les points suivants se produisent comme q évalue chaque contrainte dans la clause WHERE de droite à gauche:
q)update volume:volume-closingvol from t where (time=15:59:00)|time=12:59:00,volume>=closingvol,time=(max;time)fby ([]date;sym) date time sym volume closingvol ------------------------------------------ 2019.02.01 12:59:00 AAPL 100 24000 2019.02.01 12:59:00 BAC 1000 12000 2019.02.01 15:59:00 AAPL 1000 24000 2019.02.01 15:59:00 BAC 0 12000 2019.02.02 12:59:00 AAPL 5000 21000 2019.02.02 12:59:00 BAC 20000 11000 2019.02.02 15:59:00 AAPL 0 21000 2019.02.02 15:59:00 BAC 1000 11000
Merci Jomahony - Je ne pense pas que cela résout cependant. J'ai mis à jour la question avec un exemple de là où cela ne semble pas fonctionner.
Le Vecteur conditionnel ? Code > Peut-être utile ici:
update volume:?[time in 12:59:00 15:59:00;volume-closingvol;volume] from t where vol>=closingvol
Votre exemple montre que le volume pourrait être plus grand que le volume de fermeture des deux fois - (12:59:00 15:59:00) pour la même date, symm paire. C'est pourquoi la condition 'vol> = fermeingvol' donne une réponse incorrecte (qui est utilisée par vous dans votre exemple et également utilisée dans d'autres réponses à votre message).
La solution ci-dessous fonctionnerait en fonction des hypothèses suivantes: p>
Même si les hypothèses ci-dessus ne tiennent pas dans le scénario actuel, il est très facile de changer en dessous de la requête pour travailler selon cela. P>
date time sym volume closingvol ------------------------------------------ 2019.02.01 12:59:00 AAPL 100 24000 2019.02.01 15:59:00 AAPL 1000 24000 2019.02.02 12:59:00 AAPL 5000 21000 2019.02.02 15:59:00 AAPL 0 21000 2019.02.02 12:59:00 BAC 20000 11000 2019.02.02 15:59:00 BAC 1000 11000 2019.02.01 12:59:00 BAC 1000 12000 2019.02.01 15:59:00 BAC 0 12000