Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Хранимая процедура


Страницы:   1 2 3

Knight ©   (2008-06-17 09:01:00) 

Помогите осознать логику процедуры, которая должена сделать выборку из двух таблиц.

В результирующий набор данных должны попасть строки из табл1 для которых табл1.поле1=табл2.поле1 AND табл2.поле2=0 ... или табл1.поле1 попадает в интервал значений табл2.поле1 такой, что хотя бы один из них имеет табл2.поле2=0

табл1
---------------------
   поле1     поле2
---------------------
1  |  1   | значение1
2  |  4   | значение2
3  |  6   | значение3
4  |  7   | значение4
5  |  14  | значение5

табл2
---------------------
   поле1     поле2
---------------------
1  |  2   | 23
2  |  5   | 0
3  |  7   | 0
4  |  9   | 2322
5  |  11  | 111
6  |  13  | 232
7  |  15  | 0


Sergey13   (2008-06-17 09:30:00) [41]

> [8] Knight ©   (17.06.08 09:24)

Ну, тогда с "доработкой" второй таблицы до "удобного вида" наверное не покатит. 8-)

Тогда в лоб
1. Берем запись и Т1
2. если есть четкое соответствие в Т2 там проверяем поле2
3. если нет соответствия
3.1 берем максимальное, меньше данного, проверяем П2 у него
3.2 берем минимальное, больше данного, проверка П2
4. На основани пункта 3 принимаем решение


Knight   (2008-06-17 09:29:00) [42]

поле1 типа datetime в первую таблицу значения идут примерно раз в 5-6 секунд, во вторую каждые 2.


Knight   (2008-06-17 09:27:00) [43]

Раньше обходился простыми запросами.. процедурами не пользовался, а оказывается удобная штука :)


Knight   (2008-06-17 09:24:00) [44]

т.е. наоборот...


Knight   (2008-06-17 09:24:00) [45]

В табл1 добавляется примерно 50 тысяч записей в день, во вторую 20 тысяч.


Sergey13   (2008-06-17 09:22:00) [46]

+ к [5] Sergey13 ©   (17.06.08 09:21)

и постоянна.


Knight   (2008-06-17 09:22:00) [47]

Они обе ОЧЕНЬ большие.


Sergey13   (2008-06-17 09:21:00) [48]

> [0] Knight ©   (17.06.08 09:01)

А насколько велика вторая таблица?


Knight   (2008-06-17 09:19:00) [49]

Спасибо... код я сам напишу главное понять с какого боку подойти :)

Я так понял, что надо сделать выборку из табл2 во временую таблицу в которую войдут все строки из нужного интервала табл1.поле1
(например, для интревала 6-12 из табл1 выбрать 5-13 из табл2)

После пробегаться по выборке из табл1 и проверять ближайшие значения из временной таблицы. Напомните только как в sql найти ближайшее в меньшую сторону, а потом в большую сторону :)


oldman   (2008-06-17 09:08:00) [50]


> Помогите осознать логику процедуры


Логика 1
1. Взять запись табл1, оценить ее поле1
2. Найти соответствующую запись в табл2, оценив табл2.поле1
3. проверить у нужной записи в табл2 поле2
4. если оно равно 0, запись из табл1 поместить в набор данных

Логика 2
1. Поставить фильтр табл2 такой, что табл2.поле2=0
2. Работая теперь с табл2.поле1 выбрать нужное из табл1

Логика 3
Если тебе нужен код sql-запроса, или код процедуры, так и скажи...
А то написал простейшее условие с "помогите понять логику"
:)))


Knight   (2008-06-17 09:06:00) [51]

Расширю табл1, чтобы выкинуло по-больше.

табл1
---------------------
  поле1     поле2
---------------------
1  |  1   | значение1
2  |  4   | значение2
3  |  6   | значение3
4  |  7   | значение4
5  |  10  | значение5
6  |  12  | значение6
7  |  14  | значение7

результат
---------------------
 поле1     поле2
---------------------
1  |  4   | значение2
2  |  6   | значение3
3  |  7   | значение4
4  |  14  | значение7


Knight   (2008-06-17 09:04:00) [52]

результат
---------------------
  поле1     поле2
---------------------
1  |  4   | значение2
2  |  6   | значение3
3  |  7   | значение4
4  |  14  | значение5


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо