mysql - 排序依据未按预期排序

标签 mysql sql

我正在使用以下查询:

SELECT plan.datum, plan.anketa, plan.ai as autoinc, plan.objekt as sifra , objekt.sifra, objekt.temp4_da FROM plan 
LEFT JOIN objekt ON plan.objekt = objekt.sifra WHERE objekt.temp4_da = '1'
 AND objekt.sifra >= 30 AND plan.datum > '2019-01-15' and plan.datum < '2019-01-30'
 GROUP BY objekt.sifra
 ORDER BY plan.datum ASC, plan.objekt ASC

我得到的结果是按最后的记录排序的,尽管我确实按日期排序。 enter image description here

结果应该是从 2019 年 1 月 15 日开始的,但正如您所看到的,它已排序到最后日期 plan.datum < '2019-01-30' ...

我怎样才能实现这个目标?

编辑: 当我选择 2019-01-15 到 2019-01-20 时,我实现了以下目标: enter image description here

最佳答案

您的结果来自 MySQL 使用 GROUP BY 处理错误 SQL 查询的能力。例如,大多数 DBMS 无法处理这样的查询

SELECT col1, col2
FROM tab
GROUP BY col1

如果 col1tab 的主键,某些 DBMS 会处理此查询,但是,MySQL 始终处理它并返回一个随机 col2如果有多个 col2 值对应于 col1!例如,有表

col1 | col2
-----------
a    | 1
a    | 2

那么 MySQL 可能会在周一返回 (a, 1) 结果,并在周二使用上面所示的 SQL 查询返回 (a, 2)(我有点讽刺) )。

我相信这也是你的情况。 MySQL 为每个 objekt.sifra(查询中的属性分组)随机选择 plan.datum,随后您会错过一些 plan.datum 值在结果中。修复您的查询以获得确定性值,您将摆脱问题。

关于mysql - 排序依据未按预期排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54195524/

相关文章:

mysql - 如何使用 MySQL 删除一列中所有重复的行?

mysql - Bash 脚本 - 错误 1 ​​(HY000) - 从数据库保存表

php - Zend Framework 2 数据库错误

mysql - 如何连接到在 Google Container Engine 上运行的 Kubernetes 中的 IPv6 地址?

Airflow中使用的MySQL出现了很多死锁

MySQL:从 200,000 行中获取平均值或总和

php - Laravel Migration 停止并且不执行任何操作

php - 使用 mySQL 在 PHP 中 SQL 不返回结果

SQL Server - 使用计数总和

使用 Powershell SQL 将数据提取到 Excel