【问题标题】:order by not working as expected通过不按预期工作来订购
【发布时间】:2014-06-24 02:23:23
【问题描述】:

我想在两个日期之间拉入所有 bday 成员 - 无论年份.. 只是月份和日期.. 我得到正确检索的结果,但没有按我预期的那样排序......

我需要按月按天数升序排列的记录 - 这样一个月内的这些成员按天数按升序排列..(我按月分组,但不按天数分组)

查询:

  SELECT * 
  FROM family_member 
  WHERE DATE_FORMAT(dob, '%m-%d') 
          BETWEEN DATE_FORMAT('2013-07-1', '%m-%d') 
             AND DATE_FORMAT('2013-09-30', '%m-%d') 
  order by MONTH(dob)
          ,DAYOFMONTH(dob) 
          and status='a'

【问题讨论】:

  • 您使用哪种 DBMS?
  • 它看起来像mysql,但为什么不直接按dob 没有月份和日期?
  • 可能按月而不是按年分组
  • 应该 and status='a' 是 where 子句的一部分而不是 order by?
  • 我错过了 =status='a' 短语.. 输入错误

标签: sql


【解决方案1】:

我认为你需要去掉order by中的and

SELECT * FROM family_member 
  WHERE DATE_FORMAT(dob, '%m-%d') BETWEEN DATE_FORMAT('2013-07-1', '%m-%d') AND DATE_FORMAT('2013-09-30', '%m-%d') 
  order by MONTH(dob), DAYOFMONTH(dob), status='a'

正如所写,它是由MONTH(dob) 排序的,然后是ANDing DAYOFMONTH(dob)status='a' 的布尔结果

或者你在where子句的中间插入了order by

SELECT * FROM family_member 
  WHERE DATE_FORMAT(dob, '%m-%d') BETWEEN DATE_FORMAT('2013-07-1', '%m-%d') AND DATE_FORMAT('2013-09-30', '%m-%d') 
     and status = 'a'
  order by MONTH(dob), DAYOFMONTH(dob)

【讨论】:

    猜你喜欢
    • 2016-01-16
    • 2012-10-23
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多