2017-09-27 1 views
0

Ich brauche die Ereignisnummer, die ausgefüllt werden muss. Die Tabellendefinition hat alle drei Spalten und die Rohdaten haben 2 Spalten.MySQL - So fügen Sie die Vorkommensnummer einer doppelten ID in die Zeile ein

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 
... 

Die Daten werden vorsortiert (raw) nach Veranstaltungsdatum (unique/Zeitstempel) und dann ID, bevor sie in MySQL gelesen werden (CSV-Datei) und das Nummernfeld muss in a bestimmt werden Art und Weise, die damit übereinstimmt. (Das 2. Vorkommen passierte 2. Mal.)

+0

Sind dann zu aktualisieren einzigartig pro Gruppe oder es kann eine Chance auf dasselbe Datum und dieselbe ID mehr als einmal geben? –

+0

Das tatsächliche Datumsfeld ist ein Zeitstempel, der durch einen einzigen Prozess erstellt wurde (keine Parallelen). Daher ist es unmöglich, dass die Werte nicht eindeutig sind. Die Zeit, die benötigt wird, um einen Eintrag länger als die Auflösung des Zeitstempels zu verarbeiten. –

+0

Siehe: [Warum sollte ich MCVE für eine scheinbar einfache SQL-Abfrage bereitstellen?] (Https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve -für-was-scheint-mir-eine-sehr-einfache-sql-Abfrage) – Strawberry

Antwort

1

Wenn Daten pro ID eindeutig sind, können Sie die folgende Abfrage verwenden, um die Vorkommensnummer zu erhalten. basierend auf eventdate mit einem Tisch

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

Für Update passend LET demo2 sagen ist die Zieltabelle Sie können Termine Update-Abfrage schreiben, wie

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

Dies ist in der Nähe. Die Häufigkeitszahlen der Duplikate sind in umgekehrter Reihenfolge. ID # 2 am 1/12 sollte das Vorkommen mit der Nummer 1 sein. –

+0

Ändern Sie dies in b.EventDate

+0

@MikeSmith Ich denke nicht, dass es das Ordnungsteil beheben wird, bin ich nicht sicher, aber wenn Sie so sagen, aktualisiere ich meine Antwort –

Verwandte Themen