#mysql
#mysql
Вопрос:
Пример. Если я введу сегодняшнюю дату 2014-06-23, она должна показать мне дату последнего воскресенья предыдущего года, т.Е. 2013-12-29. Не следует использовать какие-либо процедуры / подзапросы, это должен быть только один запрос. Я использую MySQL. Пожалуйста, помогите.
Комментарии:
1. ВЫБЕРИТЕ MAX(user_joined_date) ИЗ loyalty_fact, ГДЕ YEARWEEK( user_joined_date, 0 ) = YEARWEEK(LAST_DAY(ADDDATE(LAST_DAY(‘2014-06-20’),-365)),0) И ДЕНЬ НЕДЕЛИ( user_joined_date ) =6 И user_joined_date <= ‘2014-06-20’
2. приведенный выше запрос — это другой запрос, который мы пробовали.. здесь user_joined_date — столбец даты
Ответ №1:
Попробуйте что-то вроде этого:
select (date(now()) - interval dayofweek(now()) - 1 day) - interval (weekofyear(now()) - 1) * 7 day
Комментарии:
1. Спасибо, Гордон, могу ли я получить что-то вроде, если он попросит ввести дату, и если я введу любую дату, он должен показать мне дату последнего воскресенья предыдущего года?
2. Вы можете сделать это для любой даты, заменив
now()
на указанную дату.3. Я попробовал это select (‘2013-04-15’ — interval dayofweek(2013-04-15) — 1 день) — interval (weekofyear(2013-04-15) — 1) * 7 день как ВОСКРЕСЕНЬЕ; но получаю НУЛЕВОЙ результат
Ответ №2:
Это вернет прошлое воскресенье текущего месяца
SELECT DATE_SUB(DATE(NOW()), INTERVAL DAYOFWEEK(NOW())-1 year) last_sun
Это вернет прошлый год в прошлое воскресенье
SELECT (DATE_SUB(DATE(NOW()), INTERVAL DAYOFWEEK(NOW())-1 day))- INTERVAL (WEEKOFYEAR(NOW()) - 1) * 7 DAY AS Sunday
Комментарии:
1. Я попробовал это select (‘2013-04-15’ — interval dayofweek(2013-04-15) — 1 день) — interval (weekofyear(2013-04-15) — 1) * 7 день как ВОСКРЕСЕНЬЕ; но получаю НУЛЕВОЙ результат.. это правильно??
2. @user3766247 На самом деле вы пропустили одинарные кавычки в дате.. Попробуйте эту
select ('2013-04-15' - interval dayofweek('2013-04-15') - 1 day) - interval (weekofyear('2013-04-15') - 1) * 7 day as SUNDAY;
проверку здесь sqlfiddle.com /#!2/d41d8/397263. спасибо, это сработало, и я получил результат как «2012-12-30», который является правильным. Но если я изменю дату в запросе как «select (‘2012-06-06’ — interval dayofweek(‘2012-06-06’) — 1 день) — interval (weekofyear(‘2012-06-06’) — 1) * 7 день как ВОСКРЕСЕНЬЕ;» это дает мне «2012-01-01», что неверно .. пожалуйста, помогите