2012-11-07 4 views
3

저는 인터넷 검색을 많이 해봤지만이 사실을 제대로 파악할 수는 없습니다. 이것이 사소한 질문이라면 사과드립니다.다음 행이 다른 값을 가지면 MySQL SELECT 행?

'batter'열이 특정 값이고 다음 행이 동일한 배터가 아닌 경우 행을 선택하고 싶습니다. 나는 박쥐의 최종 피치를 나타내는 행을 얻으려고합니다. 최종 피치라면 다음 행은 새로운 타자가됩니다. 자동 증가 ID 열을 사용하면 도움이됩니다.

편집 :

데이터의 구성 방법은 다음과 같습니다. 나는 그가 찾고 삼진 얼마나 많은 시간을 알고 싶다면 나는의 pitch_des을 알고 있어야합니다,

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

을하지만 : 은 지금 내가 시간이 "276055"을 타자 얼마나 많은 알고 싶다면 내가 할 것 삼진 atbat의 마지막 피치.

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

이것은 LEAD 또는 LAG 윈도우 함수입니다 - 검색에 도움이 될 수 있습니다. – Randy

답변

2

Pseduo 코드 (일할 90 % 예상) :

select * 
from (
    [ query from above ] 
) foo 
where foo.my_action = 'use me' 
+0

조금 혼란 스럽네요. '나를 사용'하고 '나를 건너 뛰기'값은 무엇입니까? 고맙습니다. – user1807053

+0

첫 번째 쿼리는 특정 값을 가진 새 타자인지 여부를 결정합니다. 그것은 당신에게 말할 필요가 있습니다. 그래서 "use me"를 반환하면, 당신이 사용하기를 원하는 줄이 될 것이고, "skip me"를 반환하면 건너 뛸 줄이 될 것입니다. 첫 번째 쿼리를 두 번째 쿼리와 함께 래핑하면 사용할 쿼리를 볼 수 있습니다. –

0

흥미로운 질문 :

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 

사용하려는 다만 타자를 원하는 경우는, 마지막 쿼리를 포장 .

이전 테이블에서 rowid를 조인하는 현재 행의 rowid에 기초하여 해당 테이블을 조인하고 'batter'필드가 동일하지 않은 것으로 확인한 것처럼 보입니다. 마지막 행을 처리하려면 왼쪽 외부 조인을 사용하십시오 (예 : 조인 할 후속 행이 없을 경우 리턴합니다). '말라 MySQL의 구문을 알고 있지만 같은 시도 :

SELECT fr.* 
FROM mytable fr 
LEFT OUTER JOIN mytable nr 
ON [email protected] = [email protected]+1 
WHERE fr.batter <> nr.batter 

를 (- 당신이 기본 MySQL의 구문 아래있어 가정 당신은 왼쪽 외부 조인 및 조건 + = 인수 곳으로 절에 대체 할 수있다).

+0

'SELECT fr. * FROM mlb2012 fr 왼쪽 외부 조인 mlb2012 nr ON fr.id = nr.id +1 어디에서 fr.batter <> nr.batter' 위를 시도했습니다. 그것은 나에게 모든 일당의 첫번째 투구를 주었다. 그래서 그것은 가깝다. 정확히 무엇을하는지 알아 내기 위해 읽어야하지만 고맙습니다. 이제 마지막 피치의 행을 표시해야합니다. – user1807053

관련 문제