我用Google搜索了很多但我无法弄明白这一点。如果这是一个微不足道的问题,我道歉。
如果'batter'列等于某个值并且下一行不是同一个击球手,我想选择一行。我正试图获得代表击球最终投球的排。如果它是最终的音高,那么下一行将是一个新的击球手。如果有帮助,我正在使用自动递增的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
答案 0 :(得分: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'
答案 1 :(得分: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
(你可以用条件和+ =参数替换左外连接和on子句 - 我假设你已经掌握了基本的MySQL语法。)