テーブル「starting_pitcher_stats」にRow_Number列を作成するためにMySQLコードを決定するのに苦労しています私は1からスタートしたいと思っていますが、新しい年の初めに1から、そして新しい投手がいるときには1から再開したいと思っています。私は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
私は次のコードを使用する場合新しい年の開始時に1でROW_NUMBER列の再起動を作るために、新たな投手があった場合、それは動作しません:
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
ですこのRow_Number列を設定して、Game_Date列のような別の列で並べ替えたりグループ化したりしても1から始まるようにすることは可能ですか?
誰か助けてもらえますか?
ありがとうございます。 リー
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
は、私は必要な編集が明らかであると確信しているが、私の経験では、それを見つけることができることが十分ではありません。
はい、そのゲーム「Park_ID」の「YEAR_ID」、「Game_Date」、「Game_Number」、およびホームチームをカプセル化する一意のID「GAME_ID」があります。 double_headersについて私に思い出させてくれてありがとう... "Game_Number"は、利用可能な "GAME_ID"フィールドから派生したフィールドで、ダブルヘッダーのゲーム "1"またはゲーム "2"または1つのゲームの場合はゲーム「0」。 GAME_IDを使用すると、Year_ID、Game_Date、Game Numberで別々に参加するのではなく、プロセスをより効率的にするように聞こえますか?ここで
は、テーブルのサンプル、GAME_IDとYEAR_ID列を含む今回のスクリーンショットです:
私はまだコードのすべてを理解しようとしている...い"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
おっと、間違っています。いずれにしても、挿入トリガを試みます。代わりに、最後の行を選択するだけです。年と投手が異なる場合は、1を挿入します。同じ場合は、行番号+ 1を挿入します。 – ShuberFu