Есть ли в MySQL команда, которая может помочь мне пропускать определенные данные с определенной частотой?

0

У меня SQL-запрос (MySQL), как показано ниже:

SELECT DISTINCT 'date','type' FROM 'chart_data' WHERE 'import_code' = 'XYZ' AND ('date' BETWEEN 'sdate' AND 'edate')

где sdate и edate - моя дата начала и дата окончания соответственно. Это вернет все даты, начиная с даты начала до конца.

Мои требования. Я хотел бы, чтобы в случае, если разница в дате не превышает 1 года, все данные должны быть получены, но если разница в дате превышает 1 год и менее 2 лет, данные будут получены с интервалом в 2 дня ( Пример: 1 января 2018 года, 3 января 2018 года, 5 января 2018 года и т.д.). Аналогичным образом, если разница в дате превышает 2 года и менее 3 лет, данные будут извлекаться с интервалом 3 дня (пример: 1 января 2018 года, 4 января 2018 года, 7 января 2018 года и т.д.),

Есть ли какая-нибудь команда в MySQL, которая может помочь мне пропустить определенные данные с определенной частотой?

Теги:

1 ответ

0

Нет команды или функции, которые вам дадут. Вы можете попробовать захватить все данные, присвоить номер строки, а затем найти интересующие вас дни, используя timestampdiff в вычислении мод. например

select dte,ddiff
from
(
select timestampdiff(day,'2018-01-01','2018-01-02') + 1 ddiff
) d
cross join
(
select dte,@rn:=@rn + 1 rn
from dates , (select @rn:=0) r
) s
where s.rn % d.ddiff = 0 and 
        dte between '2018-01-01' and '2018-01-10'

результат

+------------+-------+
| dte        | ddiff |
+------------+-------+
| 2018-01-01 |     2 |
| 2018-01-03 |     2 |
| 2018-01-05 |     2 |
| 2018-01-07 |     2 |
| 2018-01-09 |     2 |
+------------+-------+
5 rows in set (0.00 sec)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню