Entschuldigung für den unklaren Titel.SQL Server - Mehrere Transaktions-IDs - Wenn enthalten - Nur Neueste auswählen
Ich versuche, einen Zeitüberprüfungsbericht in SQL zu erstellen, aber habe eine Wand getroffen.
Das Problem, mit dem ich konfrontiert bin, ist, dass manchmal Änderungen von Support-Mitarbeitern vorgenommen werden, nachdem ein Mitarbeiter seine Zeit eingereicht hat und die einzige Möglichkeit, diese zu unterscheiden, durch die Transaktions-ID ist. Wenn beispielsweise John Doe seine Zeitkarte übermittelt hat, wäre seine Transaktions-ID in der Tabelle 1234, aber wenn eine Änderung an diesem Eintrag vorgenommen würde, wäre die Transaktions-ID in der Tabelle 1234-00, dann 1234-01, dann 1234-02 und so weiter für jede Änderung. Was ich tun möchte, ist meine SQL-Abfrage ändern, so dass, wenn die Transaktions-ID enthält ein - es wählt nur den neuesten Eintrag.
Siehe folgende Beispielcode:
SELECT
jb_id AS JobID,
MAX(jb_nme) AS JobName,
MAX(emplye_nme_frst) + ' ' + MAX(emplye_nme_lst) AS FullName,
jchstry_dte_effctve AS EffectiveDate,
jchstry_hrs,
pytype_id PayType,
jbcstctgry_id,
jbcstctgry_dscrptn,
jchstry_srce_trnsctn_id
FROM jb
JOIN jbbllngitm
ON jbbllngitm.jb_rn = jb.jb_rn
JOIN jbcstcde
ON jbcstcde.jb_rn = jb.jb_rn
JOIN jchstry
ON jbcstcde.jbcstcde_rn = jchstry.jbcstcde_rn
JOIN pytype
ON pytype.pytype_rn = jchstry.pytype_rn
JOIN jbcstctgry
ON jbcstctgry.jbcstctgry_rn = jchstry.jbcstctgry_rn
JOIN emplye
ON jchstry_rfrnce_rn = emplye.emplye_rn
WHERE jb_id = '1234'
AND jchstry_dte_effctve BETWEEN 'XXXX-04-01' AND 'XXXX-04-04'
GROUP BY jbcstcde_nme,
jb.jb_rn,
jchstry.jchstry_dte_effctve,
jb.jb_id,
pytype.pytype_id,
jbcstctgry.jbcstctgry_id,
jbcstctgry.jbcstctgry_dscrptn,
jchstry.jchstry_hrs,
jchstry.jchstry_srce_trnsctn_id
Beispieldaten
JobID JobName FullName EffectiveDate Hours PayType Source Transaction ID
1234 XXXX John Doe 4/1/XXXX 0.25 Straight Time 5678
1234 XXXX John Doe 4/1/XXXX 8 Straight Time 5678-01
1234 XXXX John Doe 4/4/XXXX 8 Straight Time 4567
Zum Beispiel in der obigen Tabelle, da es für 5678 zwei Transaktions-ID ist nur ich die Transaktions-ID auswählen möchten, dass die enthält -01. Wenn die Ergebnisse Transaktions-ID 5678-01, 5678-02 und 5678-03 hätten, möchte ich nur, dass die Abfrage diese Zeile mit 5678-03 zurückgibt.
Bitte lassen Sie mich wissen, wenn etwas unklar ist. Das war schwerer zu erklären als ich erwartet hatte.
Setzen Sie die '01' in eine neue Spalte und Abfrage der Max für diese Spalte und Gruppe nach Transaktions-ID? – dfundako
Aber es gibt Einträge, die überhaupt keine -01, -02 Werte haben. Die Transaktions-ID 4567 ist korrekt und es wurden keine Änderungen vorgenommen. –
Gibt es eine Datumszeitstempelspalte, die den Zeitstempel nach jeder Änderung aufzeichnet? und welche Version von SQL-Server verwenden Sie? – objectNotFound