-3

我有一个mysql的脚本如下:

设置@waktu = NULL;
选择用户名,
IF (@username = 用户名,
    IFNULL(TIMEDIFF(waktu,@waktu),0), @waktu:=waktu +
        NULL + LEAST(0,@username := username)) selisih_waktu, @waktu:=`waktu` 作为时间
FROM mdl_temporer_log2 WHERE rolename = 'Student'
由 waktu 订购

之后,我运行该脚本,它将显示如下:

用户名 | selisih_waktu | 时间          
-----------|---------------|--------------
水| 空 | 05:55:07          
水| 空 | 05:55:09   
梅吉 | 空 | 05:55:37    
梅吉 | 空 | 05:55:40         
梅吉 | 空 | 05:55:45     

但是,当我第二次运行它时,该脚本将显示如下:

用户名 | selisih_waktu | 时间          
-----------|---------------|--------------
水| 0 | 05:55:07          
水| 00:00:02 | 05:55:09   
梅吉 | 空 | 05:55:37    
梅吉 | 00:00:03 | 05:55:40         
梅吉 | 00:00:03 | 05:55:45     

我想从该脚本中获取如下输出:

用户名 | selisih_waktu | 时间          
-----------|---------------|--------------
水| 空 | 05:55:07          
水| 00:00:02 | 05:55:09   
梅吉 | 空 | 05:55:37    
梅吉 | 00:00:03 | 05:55:40         
梅吉 | 00:00:03 | 05:55:45     

所以,我很困惑,那个脚本是对还是错?如果该脚本是错误的,那么正确的脚本如何?

4

1 回答 1

0

问题在这里:

...@waktu:=waktu + NULL + LEAST...

为什么要在NULL这里添加?NULL不是零或任何东西,它是unknown

Anything + unknown = unknown 

只需删除+ NULL.

编辑:

现在我阅读了更多关于它的信息,这里

LEAST(0,@username := username))

对我来说也没有意义。LEAST()返回最小的参数,但您是在比较苹果和橙子。第二个参数只是将行值分配给变量。


你应该解释你的查询应该做什么(用词,而不仅仅是用表格),否则这个问题没有多大意义并且无法回答。

于 2013-06-23T11:02:31.520 回答