3

私はたくさんグーグルで検索しましたが、これを完全に理解することはできません。これが些細な質問であれば申し訳ありません。

「バッター」列が特定の値に等しく、次の行が同じバッターでない場合、行を選択したいと思います。打席の最終ピッチを表す行を取得しようとしています。最終投球なら次の打者は新打者。それが役立つ場合は、自動インクリメントされた id 列を使用しています。

編集:

データの整理方法は次のとおりです。今、打者「276055」が何回三振したか知りたい場合は、次のようにします。

SELECT * FROM `mlb2012` WHERE batter = "276055" AND atbat_event = "strikeout" AND atbat_pitch = "1"

しかし、彼が何回三振したかを知りたい場合は、打席の最後のピッチのpitch_desを知る必要があります。

ID | Batter | atbat_pitch | atbat_event | pitch_des      | 
----------------------------------------------------------
1  | 457477 | 1           | Double      | Called Strike
2  | 457477 | 2           | Double      | In play, no out
3  | 452121 | 1           | Strikeout   | Foul
4  | 452121 | 2           | Strikeout   | Foul
5  | 452121 | 3           | Strikeout   | Called Strike
6  | 543569 | 1           | Walk        | Ball
4

2 に答える 2

3

Pseduoコード(90%が機能する可能性が高い):

set @last_batter_id = NULL;

select batter_id, @last_batter_id,
  case when batter = "certain value" and batter_id != @last_batter_id then 'use me' else 'skip me' end as my_action,
  @last_batter_id := batter_id
from my_table

使用したいバッターだけが必要な場合は、最後のクエリをラップします。

select *
from (
   [ query from above ]
) foo
where foo.my_action = 'use me'
于 2012-11-07T19:16:09.273 に答える
0

興味深い質問です。

前のrowidを結合し、「バッター」フィールドが等しくないことを確認する現在の行のrowidに基づいて、そのテーブルをそれ自体に結合したいようです。左外部結合を使用して最後の行を処理します (つまり、結合する後続の行がない場合は戻ります)。mysql の構文はわかりませんが、次のようなものを試してください。

SELECT fr.* 
FROM mytable fr 
LEFT OUTER JOIN mytable nr 
ON fr.@rowid = nr.@rowid+1 
WHERE fr.batter <> nr.batter

(左外部結合と on 句を where 条件と += 引数に置き換えることができます - 基本的な MySQL 構文がダウンしていると仮定します)。

于 2012-11-07T19:34:10.957 に答える