2012-11-07 34 views
3

我谷歌搜索了很多,但我不能完全弄清楚這一點。如果這是一個微不足道的問題,我很抱歉。如果下一行是不同的值,MySQL選擇行嗎?

我想選擇一個行,如果「連擊」列等於某個值和下一行是不一樣的連擊。我試圖找到代表蝙蝠最後球場的那一排。如果它是最後的球場,那麼下一排將是一個新的擊球手。如果有幫助,我使用自動遞增的ID列。

編輯:

這是數據的組織方式。 現在如果我想知道多少次連擊「276055」擊中了我會做:

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

但是,如果我想知道多少次,他打出去找,我需要知道的pitch_des 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

這是一個超前或滯後窗口功能 - 可以幫助您的搜索。 – Randy

回答

2

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' 
+0

我對此有點困惑。什麼是'使用我'和'跳過我'的價值觀?謝謝。 – user1807053

+0

第一個查詢決定它是否具有特定值的新連擊。它需要告訴你,所以當它返回「使用我」時,它將成爲你想要使用的一行,當它返回「跳過我」時,它將成爲你想跳過的一行。您可以用第二個查詢來包裝第一個查詢,以查看您想要使用的查詢。 –

0

有趣的問題。

看起來你要根據當前行加入上一rowid的,並檢查「連擊」字段的ROWID加入該表本身是不相等的。使用左外連接處理最後一行(即,如果沒有後續行要連接到,則返回)。不要」知道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 LEFT OUTER JOIN mlb2012 nr ON fr.id = nr.id +1 where fr.batter <> nr.batter' 我試過以上。它給了我每個阿提巴特的第一個音高,所以它很接近。我需要閱讀以弄清楚它到底做了什麼,但是謝謝。現在我需要讓它顯示最後一個音高的行。 – user1807053

相關問題