Как получить последнее воскресенье предыдущего года, если мы введем любую дату в MySQL?

#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/39726

3. спасибо, это сработало, и я получил результат как «2012-12-30», который является правильным. Но если я изменю дату в запросе как «select (‘2012-06-06’ — interval dayofweek(‘2012-06-06’) — 1 день) — interval (weekofyear(‘2012-06-06’) — 1) * 7 день как ВОСКРЕСЕНЬЕ;» это дает мне «2012-01-01», что неверно .. пожалуйста, помогите