假設我有一個表,看起來像:基於前一個和下排的MySQL選擇行
mytable
category | begintime
---------|----------------------
cat1 | 2016-09-25 15:00:00
cat2 | 2016-09-25 16:00:00
cat1 | 2016-09-25 17:30:00
cat3 | 2016-09-25 19:00:00
cat1 | 2016-09-25 20:00:00
: :
注意,它沒有一個ID號,begintime
列是我的主鍵。最後,我想選擇被某個類別包圍的所有行,即選擇所有行,使得前一行的類別爲@catBefore
,下一行的類別爲@catAfter
。
例如,我想是這樣的:導致
SELECT * FROM ...
category | begintime
---------|----------------------
cat2 | 2016-09-25 16:00:00
cat3 | 2016-09-25 19:00:00
: :
的previousRow
和nextRow
在此
SELECT * FROM mytable WHERE previousRow.category = 'cat1' AND nextRow.category = 'cat1'
,似乎並沒有被定義。
理念
我嘗試過的一些事情,但沒有奏效出來呢。我的一個想法是,先選擇一個和下一個類別作爲新列,所以像:
SELECT mytable.*,
previousRow.category AS prevCat,
nextRow.category AS nextCat
FROM mytable, [stuff-I-don't-know]
導致
SELECT mytable.* ...
category | begintime | prevCat | nextCat
---------|----------------------|---------|---------
cat1 | 2016-09-25 15:00:00 | null | cat2
cat2 | 2016-09-25 16:00:00 | cat1 | cat1
cat1 | 2016-09-25 17:30:00 | cat2 | cat3
cat3 | 2016-09-25 19:00:00 | cat1 | cat1
cat1 | 2016-09-25 20:00:00 | cat3 | ...
: :
,然後用WHERE
條款過濾。
這個想法是可能的,還是可以用其他方式完成?
是否要查詢整個表,使這些prev和下一個類別和過濾呢? –
假設你的前四行來自'cat1' ...如果你正在尋找prev和下一個等於'cat1',你應該只返回第二條記錄還是應該返回第三條記錄? –
@FelyppOliveira如果是這樣的話,那麼第二和第三條記錄的前後都是'cat1',因此都應該返回 – konewka