2013-08-26 15 views
3

夥計們我想在mysql中使用解析函數lag。在Oracle中它受到支持,但我無法在Mysql中完成。那麼有人可以幫助我如何在Mysql中執行滯後操作嗎? 例如如何在mysql中執行滯後操作

UID      Operation 
1       Logged-in 
2       View content 
3       Review 

我想使用滯後功能,使我的輸出將如下

UID      Operation    Lagoperation 
1       Logged-in     
2       View content   Logged-in 
3       Review     View content 

是否支持MySQL的滯後功能???

+1

我認爲沒有內置功能。您可能必須加入同一個表才能獲得此效果。嘗試從這個線程:http://stackoverflow.com/questions/5483319/how-do-i-lag-columns-in-mysql或http://stackoverflow.com/questions/11303532/simulate-lag-function- in-mysql –

+1

不,MySQL不支持任何現代SQL功能(窗口函數,遞歸查詢...)。如果這對你來說真的很重要,你可以考慮升級到Postgres –

回答

4

可以與用戶變量效仿:

select uid, operation, previous_operation from (
select 
y.* 
, @prev AS previous_Operation 
, @prev := Operation 
from 
your_table y 
, (select @prev:=NULL) vars 
order by uid 
) subquery_alias 

在這裏工作,你初始化變量(一個或多個)。這與編寫查詢前編寫SET @prev:=NULL;相同。

, (select @prev:=NULL) vars 

然後在選擇子句中這些語句的順序是很重要的:

, @prev AS previous_Operation 
, @prev := Operation 

第一隻顯示變量值,所述第二當前行的值賦予變量。

擁有ORDER BY子句也很重要,因爲輸出不是確定性的。

這一切都被放入一個子查詢只是出於美學原因,...過濾掉這個

, @prev := Operation 

列。