![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Хранимая процедура
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