Question

Par exemple, si j'ai le tableau ci-dessous, je souhaite supprimer la 3ème ligne :

Stock   Price
-------------------
GOOG    101
GOOG    102
GOOG    102     <- want to remove this
GOOG    101

Note:même si la ligne 4 est un double de la ligne 1, je ne veux pas la supprimer car ce n'est pas un consécutif dupliquer.Autrement dit, il ne s’agit pas d’un double de la ligne située immédiatement au-dessus.

Je voudrais également vérifier les doublons dans plusieurs champs, pas seulement Price.

Était-ce utile?

La solution

d:([]Stock:4#`GOOG;Price:101 102 102 101)
q)d
Stock Price
-----------
GOOG  101
GOOG  102
GOOG  102
GOOG  101

q)d where not d~'prev d
Stock Price
-----------
GOOG  101
GOOG  102
GOOG  101

Autres conseils

Vous pouvez aussi utiliser differ

q)t:([]stock:4#`GOOG; price:101 102 102 101)
q)differ t
1101b
q)t where differ t
stock price
-----------
GOOG  101
GOOG  102
GOOG  101

supposons maintenant qu'il y ait une colonne de temps, comme vous l'indiquez dans votre commentaire ci-dessus

q)t:update time:til count i from t
q)t
stock price time
----------------
GOOG  101   0
GOOG  102   1
GOOG  102   2
GOOG  101   3
q)t where differ `stock`price#t
stock price time
----------------
GOOG  101   0
GOOG  102   1
GOOG  101   3

Revenons maintenant au t sans colonne de temps, pour plus de simplicité.Cela vous permet d'accélérer par rapport à la méthode alternative proposée par @jgleeson (ce que je trouve génial, mais une accélération est toujours la bienvenue, alors j'ai pensé que je partagerais cela malgré tout)

q)\ts do[10000;r:t where differ t]
31 1184j
q)\ts do[10000;r2:t where not t~'prev t]
62 1488j
q)r~r2
1b
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top