Как получить список меток времени за последние 7 дней в mysql?

Я пытаюсь получить список меток времени от current_timestamp до current_timestamp - интервал 'variable_no_of_days' день, но я не уверен, как это сделать.

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

Например: если мне нужны временные метки с настоящего момента до 3 дней до того, как я это сделаю

select current_timestamp - interval '3' day, current_timestamp - interval '2' day, current_timestamp - interval '1' day, current_timestamp - interval '0' day

что дает мне

6/20/2015 12:15:53 PM   6/21/2015 12:15:53 PM   6/22/2015 12:15:53 PM   6/23/2015 12:15:53 PM

Но как мне сделать это функцией, чтобы я мог указать любое количество дней и получить список.

Я видел такой запрос, но я не вижу функции adddatetime, где я мог бы сделать то же самое для метки времени, и предложение where будет работать, потому что прямо сейчас оно работает для дат для текущего предложения where в запросе, размещенном ниже, он показывает такие данные, как

323031352d30362d3231
323031352d30362d3232
323031352d30362d3233

.

select * from 
(select adddate('1970-01-01',t4*10000 + t3*1000 + t2*100 + t1*10 + t0) selected_date from
 (select 0 t0 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0,
 (select 0 t1 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1,
 (select 0 t2 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2,
 (select 0 t3 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3,
 (select 0 t4 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4) v
where selected_date between current_timestamp - interval '3' day and current_timestamp

person ramu    schedule 23.06.2015    source источник
comment
можно ли использовать союз?   -  person Frankely Diaz    schedule 23.06.2015
comment
@frankelydiaz обновил вопрос   -  person ramu    schedule 23.06.2015


Ответы (2)


Вы можете сделать что-то вроде этого:

CREATE TEMPORARY TABLE IF NOT EXISTS dates (n_date TIMESTAMP);

/* loop n times */
insert into dates select current_timestamp - interval '5' day;

select n_date from dates;

Извините, я не предоставил код цикла, но у меня нет правильной версии MySQL.

person Frankely Diaz    schedule 23.06.2015

Вы можете встроить количество дней в переменную или подзапрос

ПРЕДЛОЖЕНИЕ № 1. Пользовательская переменная

SET @daysback = 3;
select * from 
(select adddate('1970-01-01',t4*10000 + t3*1000 + t2*100 + t1*10 + t0) selected_date from
 (select 0 t0 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0,
 (select 0 t1 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1,
 (select 0 t2 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2,
 (select 0 t3 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3,
 (select 0 t4 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4) v
where selected_date between
current_timestamp - interval @daysback day and current_timestamp;

ПРЕДЛОЖЕНИЕ № 2. Подзапрос

select * from 
(select adddate('1970-01-01',t4*10000 + t3*1000 + t2*100 + t1*10 + t0) selected_date from
 (select 0 t0 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0,
 (select 0 t1 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1,
 (select 0 t2 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2,
 (select 0 t3 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3,
 (select 0 t4 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4) v,
 (select 3 daysback) w
where selected_date between
current_timestamp - interval daysback day and current_timestamp;

Попробуйте !!!

person RolandoMySQLDBA    schedule 23.06.2015