Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2014, 14:19   #1
RusikOk
Пользователь
 
Аватар для RusikOk
 
Регистрация: 16.02.2009
Сообщений: 18
По умолчанию работа с периодами и датами, вопрос по оптимизации

добрый день!

суть проблемы:
1) есть год, месяц, день.
2) есть отопительные сезоны (к примеру с 2013-10-15 по 2014-04-15) в зависимости от погодных условий даты могут немного уплывать но это легко решается если сделать точку разделения к примеру 20??-07-15.
3) данные во всех таблицах маркируются типом datetime
4) но в одной таблице будут сидеть коэффициенты которые назначаются на весь отопительный сезон

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

кстати табличка эта будет использоваться очень часто примерно в 80% запросов.

за ранее спасибо!
RusikOk вне форума Ответить с цитированием
Старый 31.07.2014, 15:32   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

т.е. вам надо на любой заданный день(testdate) узнать коэффициент соответствующий данному дню.

Код:
select coeff
from sezon
where date_begin<testdate --записи только для прошедшего периода
order by date_begin desc --выстраиваем в обратном порядке (сначала последние)
limit 1 --и берем ровно одну нужную (последнюю из всех "прошедших")

ну и конечно же индексация по полю date_begin
Код:
select coeff
from sezon
inner join ( select max(date_begin) as startdate from sezon 
             where date_begin<testdate 
          ) as startsezon on statsezon.startdate =zeson.date_begin
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 31.07.2014 в 15:41.
evg_m вне форума Ответить с цитированием
Старый 02.08.2014, 01:40   #3
RusikOk
Пользователь
 
Аватар для RusikOk
 
Регистрация: 16.02.2009
Сообщений: 18
По умолчанию

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

	AND 
			d.number = ".$counter."	
    ) AS d 
    LEFT JOIN coefQ0 AS q ON q.number = d.number AND d.date BETWEEN q.date AND ADDDATE(q.date, INTERVAL 1 YEAR)

Последний раз редактировалось RusikOk; 02.08.2014 в 01:46.
RusikOk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не большой вопрос по оптимизации Shad0wF1rst Общие вопросы C/C++ 18 06.06.2013 15:42
Вопрос оптимизации работы с MS Word Mixasik Общие вопросы Delphi 1 15.06.2009 12:13
Работа с датами Ozerich Общие вопросы Delphi 6 07.08.2008 10:03
Вопрос оптимизации программы на С++ argrus Помощь студентам 9 29.03.2008 23:54