MariaDB / mySQL分组嵌套SQL结果在MSSQL中不起作用?

时间:2017-01-12 10:59:08

标签: mysql sql nested mariadb

我想我不明白如何解析MariaDB(/ mySQL)中的嵌套查询。 此查询在MSSql中按预期工作,但在MariaDB中不起作用:

SELECT 
    V.mac,
    V.time_grouped,
    MIN(V.distance) AS mdist
FROM (      
    SELECT 
        mac,
        distance,
        rectime,        
        TO_SECONDS(rectime) - MOD(TO_SECONDS(rectime),5)  AS time_grouped
    FROM myData
) V 
GROUP BY V.mac,
    V.time_grouped;

我想将定时事件分组到' slot' 5秒我计算了一个字段“time_grouped”'提供这样的插槽。字段' time_grouped'仅保持值为5的倍数,即以0或5结尾。=>工作正常。

现在我想用这个值对结果数据进行分组,即我想在5秒的时隙中找到mac的最小距离。显然,V.time_grouped的所有值都应该是5的倍数。=>他们不是。

所以我认为查询优化器不会以预期的方式处理我的查询。 (我经常(并成功地)在MSSql中使用那些类型的查询)

问:我如何提供所需的结果? 重定向到合适的文档(目前我发现只有嵌套的其他方面的文档,这似乎与我的问题有关)。

[编辑] 附上看内部选择的样本数据。 time_grouped中的标记值应该被分组,min(距离)保持为值。 (当然,未标记的行也将保留。) 因此,结果集应该包含15行,而不是26行。

resultset

1 个答案:

答案 0 :(得分:0)

数据类型问题。

rectime的数据类型是什么?

请注意,2147483647是2 ^ 31-1,好像某个地方的大数字被截断为有符号的32位INT

在算术中使用DATETIME时,会将其转换为。比方说,20170112151722:

mysql> SELECT NOW(), 0+NOW(), TO_SECONDS(NOW());
+---------------------+----------------+-------------------+
| NOW()               | 0+NOW()        | TO_SECONDS(NOW()) |
+---------------------+----------------+-------------------+
| 2017-01-12 15:17:22 | 20170112151722 |       63651453442 |
+---------------------+----------------+-------------------+

您应该将时间转换为" unix时间戳"为了从一些起点(1970年,在MySQL的情况下)将其视为几秒钟:

mysql> SELECT NOW(), UNIX_TIMESTAMP(NOW()), UNIX_TIMESTAMP();
+---------------------+-----------------------+------------------+
| NOW()               | UNIX_TIMESTAMP(NOW()) | UNIX_TIMESTAMP() |
+---------------------+-----------------------+------------------+
| 2017-01-12 15:19:34 |            1484263174 |       1484263174 |
+---------------------+-----------------------+------------------+

无法解释此问题。请提供SHOW VARIABLES LIKE 'ver%';的输出。我希望看到确切的版本是否是32位版本。当你在场时,请提供SHOW CREATE TABLE MyData;