Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Вложенный запрос, но не просто вложенный
|
|||
|---|---|---|---|
|
#18+
Помогите с запросом пожалуйста. Субд IBM DB2, запрос для TSQLQuery из C++Builder 6. В базу данных внести хранимую процедуру невозможно(нельзя менять структуру). Структура составлялась не мной и переделать невозможно. есть 2 таблицы: *первичный ключ LST ----------------| *ID_LST | IDRG | ---| DAT_LST | | ----------------| | | по этим столбцам можно связать таблицы NAM_LST | ---------------| | *ID_NL | | IDRG _NL |----| NAM_NL | ---------------| В NAM_LST хранятся имена, а в LST дополнительная информация например дата. В NAM_LST может храниться много имен, но актуальное под последним, то есть максимальным первичным ключом. Проблема в том чтобы для списка LST.IDRG найти соответствующие максимальные NAM_LST.ID_NL и соответствуюшие им NAM_LST.NAM_NL. Например для запроса: select LST.IDRG from LST where LST.DAT_LST>="01.10.2009" and LST.DAT_LST<="20.10.2009" найти имена NAM_LST.NAM_NL у которых максимальные NAM_LST.ID_NL и соответствует LST.IDRG из запроса выше. например: таблица LST ID_LST IDRG DAT_LST 0 2 15.09.2009 1 5 02.10.2009 2 3 05.10.2009 таблица NAM_LST ID_NL IDRG _NL NAM_NL 7 2 иванов 8 2 иванцов 9 5 сидоров 10 5 сидоренко 11 3 петров 12 3 петренко 13 3 петрецов Так вот select LST.IDRG from LST where LST.DAT_LST>="01.10.2009" and LST.DAT_LST<="20.10.2009" возвратит 5 3 а для него дргая, окончательная, часть запроса должна возвратить седоренко петрецов то есть соответствует максимальным 10 и 13. Как уже не пробовал, не получается. Какойто момент недопонимаю но не знаю какой Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2009, 20:28 |
|
||
|
Вложенный запрос, но не просто вложенный
|
|||
|---|---|---|---|
|
#18+
Нарисовать не получилось, такая структура таблиц: LST: *ID_LST IDRG DAT_LST NAM_LST: *ID_NL IDRG _NL NAM_NL Связать можно по LST.IDRG и NAM_LST.IDRG_NL. Модератор: Тема перенесена из форума "Проектирование БД". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2009, 20:33 |
|
||
|
Вложенный запрос, но не просто вложенный
|
|||
|---|---|---|---|
|
#18+
Андрей ВасильевичНарисовать не получилось Видно, плохо старался ;). У меня всё получилось: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2009, 05:19 |
|
||
|
Вложенный запрос, но не просто вложенный
|
|||
|---|---|---|---|
|
#18+
Что касается основного вопроса топика... Общую идею решения подобных задач можешь подглядеть вот тут: тынц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2009, 05:22 |
|
||
|
Вложенный запрос, но не просто вложенный
|
|||
|---|---|---|---|
|
#18+
SPEC: авторselect LST.IDRG from LST where LST.DAT_LST>="01.10.2009" and LST.DAT_LST<="20.10.2009" возвратит 5 3 найти имена NAM_LST.NAM_NL у которых максимальные NAM_LST.ID_NL и соответствует LST.IDRG таблица NAM_LST ID_NL IDRG _NL NAM_NL 7 2 иванов 8 2 иванцов 9 5 сидоров 10 5 сидоренко 11 3 петров 12 3 петренко 13 3 петрецов а для него дргая, окончательная, часть запроса должна возвратить седоренко петрецов то есть соответствует максимальным 10 и 13. Решение: автор Select a.NAM_NL from NAM_LST A Inner Join (select max(b.ID_NL) MID_NL, b.IDRG _NL from NAM_LST b Inner Join (select IDRG from LST where LST.DAT_LST between "01.10.2009" and "20.10.2009" ) C on b.IDRG _NL = c.IDRG group by b.IDRG _NL ) D On b.ID_NL = d.MID_NL and a.IDRG _NL = d.IDRG _NL; Lenny Khiger, ADSPA&VP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2009, 08:04 |
|
||
|
Вложенный запрос, но не просто вложенный
|
|||
|---|---|---|---|
|
#18+
I have to correct my small mistake: Select a.NAM_NL from NAM_LST A Inner Join (select max(b.ID_NL) MID_NL, b.IDRG _NL from NAM_LST b Inner Join (select IDRG from LST where LST.DAT_LST between "01.10.2009" and "20.10.2009" ) C on b.IDRG _NL = c.IDRG group by b.IDRG _NL ) D On a.ID_NL = d.MID_NL and a.IDRG _NL = d.IDRG _NL ; Lenny Khiger, ADSPA&VP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2009, 08:09 |
|
||
|
Вложенный запрос, но не просто вложенный
|
|||
|---|---|---|---|
|
#18+
Всем спасибо!!! Самому дошло. 3 вложенных запроса, но у меня без объединений. Просто думал, что если возвращает max например и все, то группировать нельзя. На 100% был уверен. Если нет поля в результате кроме агрегир. ф-ии, то и группировать не по чем. Это недопонимание и подвело. Теперь пересмотрел отношение к group by. Тема закрыта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2009, 18:34 |
|
||
|
Вложенный запрос, но не просто вложенный
|
|||
|---|---|---|---|
|
#18+
Андрей ВасильевичВсем спасибо!!! Самому дошло. 3 вложенных запроса, но у меня без объединений. Просто думал, что если возвращает max например и все, то группировать нельзя. На 100% был уверен. Если нет поля в результате кроме агрегир. ф-ии, то и группировать не по чем. Это недопонимание и подвело. Теперь пересмотрел отношение к group by. Тема закрыта. Маладэц ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2009, 04:03 |
|
||
|
|

start [/forum/topic.php?fid=43&tid=1603031]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
167ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
| others: | 13ms |
| total: | 281ms |

| 0 / 0 |
