MySQL SELECT行如果下一行是不同的值?

时间:2012-11-07 18:52:24

标签: mysql

我用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

2 个答案:

答案 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语法。)