1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
// La source de données originale.
source:
LOAD * INLINE [
PV, Vente
A, 1
A, 2
A, 3
A, 4
B, 11
B, 12
B, 13
B, 14
B, 15
A, 5
A, 6
A, 7
A, 8
A, 9
A, 10
B, 16
B, 17
B, 18
B, 19
B, 20
];
// On génère aléatoirement une valeur à chaque ligne.
source_with_rand:
LOAD *,
rand() as rand_id
RESIDENT source;
DROP TABLE source;
// On trie les données par point de vente et par valeur aléatoire croissante.
sorted_data:
NoConcatenate
LOAD
recno() as id,
PV,
Vente
RESIDENT source_with_rand
ORDER BY PV, rand_id;
DROP TABLE source_with_rand;
// Pour chaque point de vente, on stocke le premier identifiant.
LEFT JOIN (sorted_data)
LOAD PV,
min(id) AS min_id
RESIDENT sorted_data
GROUP BY PV;
// On recrée un nouvel identifiant qui est remis à 1 pour chaque nouveau point de vente.
aggr_data:
NOCONCATENATE LOAD
PV,
Vente,
id - min_id + 1 AS new_id
RESIDENT sorted_data
;
DROP TABLE sorted_data; |
Partager