Я изо всех сил пытаюсь определить код MySQL для создания столбца Row_Number в моей таблице «start_pitcher_stats» «что я хотел бы начать с 1, а затем перезапустить с 1 в начале нового года и когда появится новый кувшин. Я использовал следующий код для создания столбца row_number:пытается создать столбец «Row Number», который перезапускается с 1 снова в начале нового года, и когда появляется новый заявочный кувшин
В идеале, таблица будет выглядеть следующим образом:
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
... Как теперь, образец таблицы выглядит следующим образом:
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
и я использовал, чтобы следующий код для его создания:
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
Когда я использую следующий код чтобы сделать рестарт колонки row_number на 1 в начале нового года, и когда есть новый кувшин, он не работает:
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
Я получаю следующее сообщение об ошибке:
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
Is можно установить этот столбец Row_Number таким образом, чтобы он начинался с 1, даже когда я его переупорядочивал (или группировал) другим столбцом, например столбцом Game_Date?
Может кто-нибудь помочь с этим?
Заранее спасибо. Ли
UPDATE: Гордон, вот ошибка я получаю:
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
Я уверен, что редактирование требуется, очевидно, но мой опыт не достаточно, чтобы быть в состоянии обнаружить его.
Да, есть уникальный идентификатор «GAME_ID», который инкапсулирует «YEAR_ID», «Game_Date», «Game_Number» и домашнюю команду для этой игры «Park_ID». Спасибо, что напомнили мне о double_headers ... «Game_Number» - это поле, которое я получил из поля «GAME_ID», которое доступно, и относится к игре «1» или игре «2» двойного заголовка, если был один или игра «0», если одна игра. Похоже, что использование GAME_ID сделает процесс более эффективным, вместо того, чтобы присоединяться отдельно по Year_ID, Game_Date и Game Number?
Вот скриншот образца таблицы, на этот раз включая game_id и YEAR_ID колонок:
Я все еще пытаюсь понять весь код ... Does «sy» из «@sy» нужно где-то определить?
I Заранее благодарю вас за помощь. Ли
UPDATE: Вот ошибка я получил, когда я попытался код, который я редактировал, удалив скобки и изменить имена некоторых из полей, чтобы соответствовать моим таблице:
Incorrect integer value: 'aased001:1977:1:1' for column 'row_number' at row 1
Вот последняя код, который я использовал, дал указанную выше ошибку. Я надеюсь, что я случайно не взять код дальше, чем то, что он должен был выполнить:
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: Вот код, который работал без ошибок:
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;
Использовать триггер вставки? На вставке выберите все строки данного Начального кувшина и данного года. Если результат пуст, вставьте 1, если нет, введите максимальный номер строки + 1. – ShuberFu
Ой, неправильно понят. В любом случае, попробуйте триггер insert. Но вместо этого просто выберите последнюю строку. Если год и кувшин разные, вставьте 1. Если они одинаковые, вставьте номер строки + 1. – ShuberFu