3

我用谷歌搜索了很多,但我不太明白这一点。如果这是一个微不足道的问题,我深表歉意。

如果“击球手”列等于某个值并且下一行不是同一个击球手,我想选择一行。我试图获得代表击球最终音高的行。如果是最后一个投球,那么下一行将是一个新的击球手。如果有帮助,我将使用自动递增的 id 列。

编辑:

以下是数据的组织方式。现在,如果我想知道击球手“276055”被击出多少次,我会这样做:

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

但如果我想知道他三振出局的次数,我需要知道 atbat 的最后一个音高的 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

伪代码(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 并检查“batter”字段不相等,将该表连接到自身。使用左外连接处理最后一行(即如果没有后续行要连接,则返回)。不知道 mysql 语法,但尝试类似:

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

(你可以用 where 条件和 += 参数替换左外连接和 on 子句——我假设你已经掌握了基本的 MySQL 语法)。

于 2012-11-07T19:34:10.957 回答