MariaDB/ mySQL 分组嵌套 SQL 结果不像在 MSSQL 中那样工作?

MariaDB/ mySQL grouping nested SQL results doesn't work as in MSSQL?

我想我不明白 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;

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

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

所以我认为查询优化器没有以预期的方式处理我的查询。 (我在 MSSql 中经常(并且成功地)使用了这类查询)

问:如何提供想要的结果? 感谢重定向到合适的文档(到目前为止,我只找到了关于嵌套其他方面的文档,这似乎与我的问题有关)。

[编辑] 附见内部示例数据select。 time_grouped 中的标记值应该分组,最小(距离)保留为值。 (当然,未标记的行也会保留。) 因此结果集应该包含 15 行而不是 26 行。

数据输入问题。

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 timestamp",以便将其视为从某个起点开始的秒数(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;.