порядок, работающий не так, как ожидалось

#sql

#sql

Вопрос:

Я хотел бы подключить всех участников 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'
 

Комментарии:

1. Какую СУБД вы используете?

2. Похоже на mysql, но почему бы просто не заказать по dob без month и dayofmonth?

3. вероятно, для группировки по месяцам, а не по годам

4. должно and status='a' быть частью предложения where, а не order by?

5. я пропустил =status= ‘a’ фразу .. был введен по ошибке

Ответ №1:

Я думаю, вам нужно убрать and в 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') 
  order by MONTH(dob), DAYOFMONTH(dob), status='a'
 

Как написано, это упорядочение по MONTH(dob) , тогда это логический результат AND DAYOFMONTH(dob) ввода и status='a'

либо это, либо вы вставили order by в середину своего where предложения:

 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)