gpt4 book ai didi

mysql - MariaDB/mySQL 分组嵌套 SQL 结果无法像 MSSQL 中那样工作?

转载 作者:行者123 更新时间:2023-11-29 19:34:28 25 4
gpt4 key购买 nike

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

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

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

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

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

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

resultset

最佳答案

数据类型问题。

retime的数据类型是什么?

请注意,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;

关于mysql - MariaDB/mySQL 分组嵌套 SQL 结果无法像 MSSQL 中那样工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41611412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com