2017-09-27 12 views
0

J'ai besoin que le numéro d'occurrence soit rempli. La définition de la table comporte les trois colonnes et les données brutes ont 2 colonnes.MySQL - Comment ajouter le numéro d'occurrence d'un ID en double dans la ligne

ID | EventDate/Time | OccurrenceNumber 
----------------------------- 
1 | 1/11/2017  | 1 
2 | 1/12/2017  | 1 
3 | 1/15/2017  | 1 
2 | 1/17/2017  | 2 
4 | 1/18/2017  | 1 
... 

Les données sont prétrié (brut) par date de l'événement (estampillé uniques/heure) et ID, avant d'être lu dans MySQL (.csv fichier de données), et le champ numéro d'occurrence doit être déterminée dans un manière qui est compatible avec cela. (La deuxième occurrence s'est produite la deuxième fois.)

+0

des dates unique par groupe ou il peut y avoir une chance de même date et même id plus d'une fois? –

+0

Le champ de date actuel est un horodatage créé par un processus unique (pas de parallélisme), il est donc impossible que les valeurs ne soient pas uniques. Le temps nécessaire pour traiter une entrée beaucoup plus longtemps que la résolution de l'horodatage. –

+0

Voir: [Pourquoi devrais-je fournir un MCVE pour ce qui me semble être une requête SQL très simple?] (Https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve -pour-ce-qui-me-semble-à-être-une-très-simple-sql-query) – Strawberry

Répondre

1

Si les dates sont uniques par ID, vous pouvez utiliser la requête suivante pour obtenir le numéro d'occurrence. sur la base correspondant EventDate avec une même table

select a.*, 
(
    select count(*) 
    from demo b 
    where a.ID = b.ID 
    and b.EventDate < a.EventDate // edit updated criteria 
) +1 OccurrenceNumber 
from demo a 
order by a.ID,a.EventDate desc 

DEMO

Pour la mise à jour laisser dire demo2 est la table cible mise à jour vous pouvez alors écrire requête de mise à jour comme

update demo2 b1 
join (
select a.*, 
(
    select count(*) 
    from demo b 
    where a.ID = b.ID 
    and b.EventDate < a.EventDate 
) +1 OccurrenceNumber 
from demo a 
) a1 on (b1.ID = a1.ID and b1.EventDate = a1.EventDate) 
set b1.OccurrenceNumber = a1.OccurrenceNumber 

DEMO

+0

Ceci est proche. Les numéros d'occurrence des doublons sont dans l'ordre inverse. L'ID n ° 2 sur 1/12 doit être le numéro d'occurrence 1. –

+0

Modification de b.EventDate

+0

@MikeSmith Je ne pense pas que cela va réparer cette partie de la commande, je ne suis pas sûr, mais si vous le dites, je mettre à jour ma réponse –