Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
проблемы во вложенном запросе
|
|||
|---|---|---|---|
|
#18+
История такая. Есть система управления персоналом, которая отслеживает все и вся, не давая просто так изменить атрибут человека. Если человек меняет фамилию, то заносится новая запись... Предисловию конец. Структура таблицы table1 tab_no as integer pnt as integer - это два ключевых поля, они мне нужны для дальнейших nested-запросов. Просто в примере я все упростил. s as integer - с какой даты действовал атрибут. cont - само значение атрибута. итого, если я меняю фамилию, к примеру, то заводится две записи. tab_no pnt s cont 1 100 100 Иванов 1 102 130 Петров 1 101 100 Иван 1 103 100 Иванович То есть у человека была фамилия Иванов, а через месяц стала Петров. Теперь задача: создать процедуру, которая вытащит только последние атрибуты для всех людей (то есть утрирую, но пусть так). Вытаскиваться должны все поля из таблицы, потому как ключи дальше используются. Отсортировать по tab_no ASC, s DESC можно бы. Но это - всего лишь подзапрос, потому Order by тут нельзя применить. А очень нужно, чтобы вытаскивались все аттрибуты, но фамилия была одна - только запись с Петровым. И если сделать max(s) по tab_no - тоже нельзя, потому что на самом деле там куча строк вылезает - отчество, имя, дедушка, бабушка и т.д. И никак без временной таблицы не обойтись? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2001, 15:44 |
|
||
|
проблемы во вложенном запросе
|
|||
|---|---|---|---|
|
#18+
Насколько я понял pnt - тип атрибута, в этом случае исходная таблица должна иметь вид: tab_no pnt s cont 1 100 100 Иванов 1 100 130 Петров 1 101 100 Иван 1 103 100 Иванович То есть исправляемый атрибут имеет тот-же pnt. Тогда для получения всех последних атрибутов можно использовать что-то типа: select tt.tabno,tt.pnt,tt.s,tt.cont from (select t1.tabNo,t1.pnt,s=max(t1.s) from table1 t1 group by t1.tabno,t1.pnt) as tmax inner join table1 as tt on (tt.tabno=tmax.tabno and tt.pnt=tmax.pnt and tt.s=tmax.s) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2001, 18:41 |
|
||
|
проблемы во вложенном запросе
|
|||
|---|---|---|---|
|
#18+
Немножко неправильно сформулировал. Да, я не описал еще одно поле, tip, по которому можно определить, что это обе записи о фамилии. tab_no pnt s tip cont 1 100 100 12 Иванов 1 102 130 12 Петров 1 101 100 13 Иван 1 103 100 14 Иванович Сейчас попробую с пред. вариантом.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2001, 10:03 |
|
||
|
|

start [/forum/topic.php?fid=46&tid=1826598]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
29ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
26ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 306ms |

| 0 / 0 |
