2013-02-13 62 views
0

我有一个DATETIME列的历史表。是否可以在DATEDIFF函数中分配变量?下面的语句:函数内的mysql赋值

SET @LASTDATETIME='2000-01-01 00:00:00'; 
SELECT DATETIME, @LASTDATETIME, TIMEDIFF(DATETIME, @LASTDATETIME:=DATETIME) AS CALC, @LASTDATETIME FROM HISTORY 

导致这样的结果:

|DATETIME   |@LASTDATETIME  | CALC | @LASTDATETIME 
------------------------------------------------------------------- 
2013-01-28 12:11:41 |2000-01-01 00:00:00 |00:00:00 |[BLOB - 19 B] 
2013-01-28 12:11:44 |2013-01-28 12:11:41 |00:00:00 |[BLOB - 19 B] 

我不明白为什么它似乎分配排序为DATETIME工作被结转到下一个记录,但CALC场失败了,在赋值之后@LASTDATETIME的值是一个BLOB?为什么不按我所期望的那样工作?

感谢您的帮助。

回答

0

试试这个:

SELECT @last AS `last`, 
     TIMEDIFF(`datetime`, @last) AS `difference`, 
     @last := `datetime` AS `current` 
FROM history, (SELECT @last :='2000-01-01 00:00:00') n 

这里是sqlfiddle

+0

工程。我实际上想要做的是根据DATEDIFF更新表格,所以据我所知,我需要在函数中更改@last。我试图更新一个名为tripid的列,如果时间戳超过最后一个记录中的时间戳超过10分钟,则为tripid增量,否则该记录被视为同一旅程的一部分。这里是一个小提琴:[sqlfiddle](http://sqlfiddle.com/#!2/35918/1/0)(希望这有效,对不起,新手) – user2053292 2013-02-14 00:01:59