Пометка определенных строк на основе даты в SQL - PullRequest
0 голосов
/ 05 июля 2018

У меня в настоящее время есть данные, которые помечены с определенной датой. Я хочу отсортировать эти данные, добавив столбец, в котором указано, будет ли дата в течение последнего месяца, в течение последних 2-3 месяцев или старше 3 месяцев.

В настоящее время мои даты хранятся в таблице следующим образом:

 Date
 ----
 06/28/2018
 06/21/2018
 05/19/2014
 05/02/2018

И мне бы хотелось, чтобы данные выглядели так:

 Date          DateTag
 ----          -------
 06/28/2018    Last Month
 06/21/2018    Last Month
 05/19/2014    Over 3 Months
 05/02/2018    Last 3 Months

У кого-нибудь есть решение SQL о том, как помечать и сортировать по таким датам? Спасибо!

Ответы [ 2 ]

0 голосов
/ 05 июля 2018
CREATE TABLE test_dates (
    date DATE
);

insert into test_dates values('2018-06-28'),('2018-06-21'),('2014-05-19'),('2018-05-02');

SELECT 
    date,
    CASE
        WHEN date BETWEEN DATE_ADD(NOW(), INTERVAL - 30 DAY) AND NOW() THEN 'Last Month'
        WHEN date BETWEEN DATE_ADD(NOW(), INTERVAL - 90 DAY) AND NOW() THEN 'Last 3 Months'
        WHEN date < DATE_ADD(NOW(), INTERVAL - 30 DAY) THEN 'Over 3 Months'
    END AS DateTag
FROM
    test_dates;
0 голосов
/ 05 июля 2018

Вы бы использовали выражение case:

select date,
       (case when date <= curdate() and date > curdate() - interval 1 month
             then 'within 1 month'
             when date <= curdate() - interval 1 month and date > curdate() - interval 2 month
             then '2-3 months ago'
             when date <= curdate() - interval 3 month
             then '3+ months ago'
        end)
from t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...