Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Перебрать данные / 5 сообщений из 5, страница 1 из 1
24.09.2014, 13:26:37
    #38756085
Стас0н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать данные
Привет всем!

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

Но для формирования отчета нужно выгружать данные по каждой неделе из определенного промежутка времени.
Сам промежуток времени лежит в табличке parameters (hist_from_dt - hist_to_dt):
Код: sql
1.
2.
3.
4.
5.
+----------+--------------+------------+------------------+----------------+--------------+
| param_id | hist_from_dt | hist_to_dt | forecast_from_dt | forecast_to_dt | sample_share |
+----------+--------------+------------+------------------+----------------+--------------+
|        1 | 2014-04-02   | 2014-07-02 | 2014-07-03       | 2015-07-03     |         0.01 |
+----------+--------------+------------+------------------+----------------+--------------+



Мне нужно набирать недели от hist_from_dt и выгружать данные за промежутки по 7 дней, пока не дойду до hist_to_dt - как это можно сделать?
...
Рейтинг: 0 / 0
24.09.2014, 13:42:07
    #38756128
Стас0н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать данные
Понятно, что нужно использовать цикл..
Вот только как работать с таким вот форматом даты?
...
Рейтинг: 0 / 0
24.09.2014, 14:10:14
    #38756187
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать данные
Стас0нПонятно, что нужно использовать цикл..
Вот только как работать с таким вот форматом даты?

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

Код: sql
1.
2.
3.
4.
5.
select now();

select now(), '2014-09-25','2014-09-23';

select (now() > '2014-09-25'),(now() > '2014-09-23')



во вторых не бояться.... всмысле сложной задачи.

если бы у тебя было не старт конец, а набор
нач 1 недели - кон1 недели
нач 2 недели - кон 2 недели
ты бы смог сделать?

а если задаться вопросом. а можно ли както из даты выковырять номер недели в году скажем
ну или ваще что можно из даты выковыривать штатно...
push
тынц

дальше думаем.. но у нас начало и конец периода...как бы нам получить список недель...

Но для формирования отчета нужно выгружать данные по каждой неделе из определенного промежутка времени.
Сам промежуток времени лежит в табличке parameters (hist_from_dt - hist_to_dt):

ооо, так нам вообщемто не надо список недель, нам надо взять данные

за период с по, но разбить процес по недельно...

хм.. а как можно разбить даты (скажем 100 штук) на "понедельно", если мы потыцали линки
:):)

ЗЫ
я по твоим постам смотрю, что ты почти сам подходишь к решению(исходя из формулировки задачи, а то ведь есть люди что забегают и долго у них надо выяснять что им надо :) )
но как мне кажется, ждёшь что решение возникнет в голове... :) так редко бывает...надо
пробывать, разбивать задачу на меленькие шашки...

вообщем пиши если вопрос останеться, особенно после второй ссылки и последней мысли ..
...
Рейтинг: 0 / 0
24.09.2014, 15:51:55
    #38756344
Стас0н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать данные
спасибо, вот накатал такую штуку:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT hist_from_dt FROM parameters WHERE param_id='1' INTO @start
SELECT hist_to_dt FROM parameters WHERE param_id='1' INTO @end

WHILE @start < @end DO
	
	ЗАПРОС (сам запрос + добавление данных в csv, временной отрезок от @start до ADDDATE(@start, INTERVAL 7 DAY))
	SET @start := ADDDATE(@start, INTERVAL 7 DAY)
	
END WHILE



Однако постоянно падает в строчке с while. Такое ощущение, что я сделал неправильное сравнение дат, но где-то в интернете находил такие примеры.. что может быть не так?
...
Рейтинг: 0 / 0
24.09.2014, 21:31:38
    #38756742
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать данные
Стас0н,

Точки с запятой не мешало бы поставить.

а я иммел ввиду спомощью функций для дат
из столбика в
ЗАПРОС (сам запрос + добавление данных в csv,
вот там где столбик с датой, получать три столбика дата, год, номер недели.

и вот отсортировав по номергод+номернедели, получиш разбиение понедельное.

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

если же надо ввиде серии независимых запросов,
то

1)получаем дату страта, и номер дня в неделе.
2)получаем дату начала недели на которую попадает дата старта
3)получаем номер недели даты конца, и аналогично дату конца последней недели

потом циклом делаем выборку из
начал_дата_шага2 ----начал_дата_шага2 + интервал 7 дней

на каждой итерации цикла проверяем, не получаеться ли что мы уже вышли за
ограничение на шаге3 полученное.

========
вообщем
1)выборка одним махом, с сортировкой по год+номернеделивгоду
2)
из дата_старт дата_финиш получить дата_начала_недели_даты_старт
и дата_конца_недели_даты_финиш

текущая = дата_начала_недели_даты_старт

ПОКА текущая +7 дней МЕНЬШЕ_ИЛИ_РАВНО дата_конца_недели_даты_финиш

ДЕЛАТЬ выборку из базы из диапазона дат

МАКС(текущая,дата_старт) --- МИН(текущая + 7 дней, дата_финиш)

ЗЫ
полагаю понятно почему макс / мин стоят
скажем дата старта 2014-09-24
тогда
дата_начала_недели_даты_старт 2014-09-22
но выборку из базы надо делать всёравно с 24 :)

аналогично с другой границей
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Перебрать данные / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]