it-swarm.com.ru

Как выбрать последние 6 месяцев из таблицы новостей, используя MySQL

Я пытаюсь выбрать последние 6 месяцев записей в таблице, у меня есть столбец с именем datetime, и это в формате datetime mysql.

Я видел много способов, используя интервал и другие методы - какой метод я должен использовать? Спасибо

30
Zabs

Используйте DATE_SUB

 .... where yourdate_column > DATE_SUB(now(), INTERVAL 6 MONTH)
95
user319198

Попробуй это:

select *
  from table 
 where your_dt_field >= date_sub(now(), interval 6 month);

Запрос читает: дайте мне все записи в table, где поле, соответствующее дате ввода, не новее, чем через 6 месяцев.

11
Pablo Santa Cruz

Я попытался @ user319198 ответить, чтобы отобразить продажи за последние 6 месяцев (сумма), это сработало, но я столкнулся с одной проблемой в самом старом месяце, я не получаю сумму продаж за весь месяц. Результат начинается с эквивалентного текущего дня этого месяца.

Просто я хочу поделиться своим решением, если кто-то заинтересован: -

yourdate_column > DATE_SUB(now(), INTERVAL 7 MONTH)
limit 6

Также было бы здорово, если у кого-то есть лучшее решение для моего случая J.

2
Bufaroosha

Вы также можете использовать TIMESTAMPDIFF

    TIMESTAMPDIFF(MONTH, your_date_column, now()) <= 6 )
1
Md. Mahmud Hasan

Для меня это выглядит как решение, так как я использую его с MariaDB, взглянем на предложение WHERE: 

SELECT MONTH(yourTimestampOrDateColumn) AS MONTH, USER, ActionID, COUNT(*) AS TOTAL_ACTIONS, ROUND(SUM(totalpoints)) AS TOTAL_PTS
FROM MyTable
WHERE MONTH(yourTimestampOrDateColumn) BETWEEN MONTH(CURDATE() - INTERVAL 6 MONTH) AND MONTH(CURDATE())
GROUP BY MONTH;

 queryResults

На изображении мы видим только месяцы, когда у пользователя были фактические данные, записанные в БД (таким образом, показывая только 4 месяца вместо 6). 

Таким образом, этот месяц является 10-м (октябрь), 6 месяцев назад был 4-м месяцем (апрель), поэтому запрос будет искать этот интервал (от 4 до 10).

1
stamster

Вы можете получить данные за последние шесть месяцев, вычитая interval of 6 month из CURDATE() (CURDATE() - это функция MySQL, которая возвращает сегодняшнюю дату ).

SELECT * FROM table 
         WHERE your_date_field >= CURDATE() - INTERVAL 6 MONTH;

Или вы можете использовать BETWEEN оператор MySQL, как показано ниже:

SELECT * FROM table 
         WHERE your_date_field BETWEEN CURDATE() - INTERVAL 6 MONTH AND CURDATE();
0
Haritsinh Gohil