Ich habe Schwierigkeiten, den MySQL-Code zu bestimmen, um eine Row_Number-Spalte in meiner Tabelle "starting_pitcher_stats" zu erstellen "Ich würde gerne von 1 anfangen, aber dann am Anfang eines neuen Jahres von 1 und wenn es einen neuen Krug gibt. Ich habe den folgenden Code die Row_Number Spalte zu erstellen:versucht, eine "Row Number" -Spalte zu erstellen, die zu Beginn eines neuen Jahres erneut von 1 startet, und wenn es einen neuen Pitcher gibt
Idealerweise wird die Tabelle wie folgt aussehen:
Starting_Pitcher park_factor std_PF Row_Number Game_Date Game_Number
aased001 108 108 1 1977-07-26 0
aased001 94 101 2 1977-07-31 0
aased001 100 100.66 3 1977-08-06 0
aased001 108 102.5 4 1977-08-11 0
aased001 108 103.66 5 1977-08-16 0
aased001 96 102.33 6 1977-08-21 0
aased001 108 103.14 7 1977-08-26 0
aased001 108 103.75 8 1977-08-31 0
aased001 104 103.77 9 1977-09-05 1
aased001 108 104.2 10 1977-09-10 0
aased001 92 103.09 11 1977-09-16 0
aased001 106 103.33 12 1977-09-22 0
aased001 108 103.69 13 1977-09-27 1
aased001 96 96 1 1978-04-11 0
aased001 100 13.06 2 1978-04-16 0
aased001 100 18.5 3 1978-04-21 0
aased001 96 23.05 4 1978-04-28 0
... So wie es jetzt ist, eine Probe der Tabelle sieht wie folgt aus:
Starting_Pitcher park_factor std_PF Row_Number Game_Date Game_Number
aased001 108 108 1 1977-07-26 0
aased001 94 101 2 1977-07-31 0
aased001 100 100.66 3 1977-08-06 0
aased001 108 102.5 4 1977-08-11 0
aased001 108 103.66 5 1977-08-16 0
aased001 96 102.33 6 1977-08-21 0
aased001 108 103.14 7 1977-08-26 0
aased001 108 103.75 8 1977-08-31 0
aased001 104 103.77 9 1977-09-05 1
aased001 108 104.2 10 1977-09-10 0
aased001 92 103.09 11 1977-09-16 0
aased001 106 103.33 12 1977-09-22 0
aased001 108 103.69 13 1977-09-27 1
aased001 96 96 14 1978-04-11 0
aased001 100 13.06 15 1978-04-16 0
aased001 100 18.5 16 1978-04-21 0
aased001 96 23.05 17 1978-04-28 0
und ich Code zu folgendem es zu erstellen:
ALTER TABLE starting_pitcher_stats ADD Row_Number int(11) DEFAULT '0' NOT NULL;
SELECT @n:=0, Row_Number, Starting_Pitcher, lg_ID, YEAR_ID, Game_Date, Game_Number FROM starting_pitcher_stats;
UPDATE starting_pitcher_stats SET Row_Number = @n := @n + 1
Wenn ich den folgenden Code verwenden den Row_Number Spalt Neustart bei 1 zu Beginn eines neuen Jahres zu machen, und wenn es ein neuer Krug ist, funktioniert es nicht:
ALTER TABLE starting_pitcher_stats ADD ROW_NUMBER1 int(11) DEFAULT '0' NOT NULL;
SELECT @n:=0, Row_Number, Starting_Pitcher, lg_ID, YEAR_ID, Game_Date, Game_Number FROM starting_pitcher_stats;
UPDATE starting_pitcher_stats IF std_PF=park_factor THEN SET Row_Number=1 ELSE SET Row_Number1 = @n := @n + 1
ich die folgende Fehlermeldung erhalten:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF std_PF=park_factor THEN SET Row_Number=1 ELSE SET Row_Number' at line 1
Ist ist es möglich, diese Row_Number-Spalte so einzurichten, dass sie bei 1 beginnt, auch wenn ich sie neu anordne oder gruppiere sie nach einer anderen Spalte wie der Game_Date-Spalte?
Kann mir bitte jemand dabei helfen?
Vielen Dank im Voraus. Lee
UPDATE: Gordon, hier ist der Fehler, den ich bekommen:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 1, 1)
)
) as rn
from starting_p' at line 4
Ich bin sicher, dass die Bearbeitung erforderlich ist evident, aber meine Erfahrung ist nicht genug, um es zu erkennen.
Ja, es gibt eine eindeutige ID "GAME_ID", die "YEAR_ID", "Game_Date", "Game_Number" und das Heimteam für das Spiel "Park_ID" enthält. Danke, dass du mich an double_headers erinnert hast. "Game_Number" ist ein Feld, das ich aus dem Feld "GAME_ID" abgeleitet habe und das auf Spiel "1" oder Spiel "2" eines Doppel-Headers verweist, falls es einen gab oder Spiel "0" wenn ein einzelnes Spiel. Es klingt, als ob die Verwendung von GAME_ID den Prozess effizienter machen würde, anstatt separat durch Year_ID, Game_Date und Game Number zu verbinden.
Hier ein Screenshot von einer Probe der Tabelle ist, diesmal die GAME_ID und YEAR_ID Spalten einschließlich:
Ich versuche immer noch den gesamten Code zu verstehen ... Does "sy" von "@sy" muss irgendwo definiert werden?
I Vielen Dank im Voraus für Ihre Hilfe. Lee
UPDATE: Hier ist der Fehler, den ich bekam, als ich den Code versucht, die ich durch das Entfernen einer Klammer und Änderung der Namen von einigen der Felder bearbeitet hatte meine Tabelle entsprechen:
Incorrect integer value: 'aased001:1977:1:1' for column 'row_number' at row 1
hier neueste Code, den ich verwendet habe, ergab den obigen Fehler. Ich hoffe, ich habe nicht aus Versehen den Code nehmen weiter weg als das, was es angeblich zu erreichen:
UPDATE starting_pitcher_stats JOIN
(select starting_pitcher_stats.*,
(@rn := if(@sy = concat_ws(':', Starting_Pitcher, YEAR_ID), @rn + 1,
@sy := concat_ws(':', Starting_Pitcher, YEAR_ID, 1, 1)
)
) as rn
from starting_pitcher_stats
cross join
(select @rn := 0, @sy := '') AS params
order by Starting_Pitcher, YEAR_ID, Game_Date, Game_Number
) as b
on b.Starting_Pitcher = starting_pitcher_stats.Starting_Pitcher AND
b.YEAR_ID = starting_pitcher_stats.YEAR_ID AND
b.Game_Date = starting_pitcher_stats.Game_Date AND
b.Game_Number=starting_pitcher_stats.Game_Number
set starting_pitcher_stats.row_number= b.rn
UPDATE: Hier ist der Code, ohne Fehler gearbeitet:
UPDATE starting_pitcher_stats JOIN
(select starting_pitcher_stats.*,
(@rn := if(@sy = concat_ws(':', Starting_Pitcher, YEAR_ID), @rn + 1,
if(@sy := concat_ws(':', Starting_Pitcher, YEAR_ID), 1, 1)
)
) as rn
from starting_pitcher_stats CROSS JOIN
(select @rn := 0, @sy := '') params
order by Starting_Pitcher, YEAR_ID, Game_Date, Game_Number
) sp2
on sp2.Starting_Pitcher = starting_pitcher_stats.Starting_Pitcher AND
sp2.YEAR_ID = starting_pitcher_stats.YEAR_ID AND
sp2.Game_Date = starting_pitcher_stats.Game_Date AND
sp2.Game_Number=starting_pitcher_stats.Game_Number
set starting_pitcher_stats.row_number = sp2.rn;
Verwenden Sie einen Insert-Trigger? Wählen Sie beim Einfügen alle Zeilen des angegebenen Starting Pitcher und des angegebenen Jahres. Wenn das Ergebnis leer ist, fügen Sie 1 ein, wenn nicht, fügen Sie die maximale Zeilennummer + 1 ein. – ShuberFu
Hoppla, missverstanden. Wie auch immer, versuchen Sie immer noch einen Insert-Trigger. Wählen Sie stattdessen die letzte Zeile. Wenn das Jahr und der Krug anders sind, füge 1 ein. Wenn sie gleich sind, füge die Reihennummer + 1 ein. – ShuberFu