#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)