Mysql 按未按预期排序进行排序
我正在使用以下查询:Mysql 按未按预期排序进行排序,mysql,sql,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 > '
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
从计划中选择plan.datum、plan.anketa、plan.ai作为autoinc、plan.objekt作为sifra、objekt.sifra、objekt.temp4_da
在plan.objekt=objekt.sifra上左连接objekt,其中objekt.temp4_da='1'
以及objekt.sifra>=30和plan.datum>'2019-01-15'和plan.datum<'2019-01-30'
按objekt.sifra分组
按plan.DATA ASC、plan.objekt ASC排序
我得到的结果是按最后的记录排序的,尽管我确实按日期排序。
结果应为2019-01-15,但如您所见,其排序为最后日期plan.datum<'2019-01-30'
我怎样才能做到这一点
编辑:
当我从2019-01-15选择到2019-01-20时,我实现了以下目标:
考虑到它似乎已经按照您想要的方式进行了排序,前4行显示,这些日期都在指定的范围内 您只需进行基本诊断: “计划”表是否实际包含这些日期的数据? 如果确实如此,则查询将删除数据 因此,下一个最容易检查的是
WHERE
,因此删除其他子句(即保留“基准”限制),该数据现在是否显示?
如果仍然没有,那么左连接
就是问题所在,因为连接也是过滤器
如果您这样做,并且数据出现,那么数据和您对数据的理解不匹配,您需要检查/确认您可能对数据做出的任何假设
我对mysql不是100%熟悉,但是
groupby
看起来很奇怪,你没有对组进行任何求和、分钟或操作。您需要这行代码吗?您的结果来自MySQL使用groupby
处理错误SQL查询的能力。例如,大多数DBMS不能处理这样的查询
SELECT col1, col2
FROM tab
GROUP BY col1
如果col1
是tab
的主键,一些DBMS会处理此查询,但是,MySQL会始终处理此查询,如果与col1
对应的col2
值超过一个,MySQL会返回一个随机的col2
值!例如,有桌子
col1 | col2
-----------
a | 1
a | 2
然后MySQL可能会在周一返回(a,1)
结果,并在周二使用上面显示的SQL查询返回(a,2)
(我有点讽刺)
我相信这也是你的情况。MySQL为每个
objekt.sifra
(查询中的group by属性)随机选择plan.datum
,然后在结果中丢失一些plan.datum
值。修复查询以获得确定性值,您将摆脱问题。您的结果似乎还可以。似乎15到20之间没有通过查询的行,只有22-29?@PhamX.Bach编辑的行。检查排序结果对我来说是正确的(它是按基准字段升序排序)。但是您误用了GROUP BY子句,这可能会导致问题。@Kickstart是的,似乎GROUP BY在这里制造了问题。谢谢。plan.datum
是plan.object
独有的吗?我的意思是每个平面。对象
只有一个对应的平面。数据
值。MySQL不返回“随机”行。它从不确定行返回值。“随机”在统计学上意味着某种东西,MySQL的选择绝对不是随机的。只是不可靠。