powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / проблемы во вложенном запросе
4 сообщений из 4, страница 1 из 1
проблемы во вложенном запросе
    #32006844
skif
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
История такая. Есть система управления персоналом, которая отслеживает все и вся, не давая просто так изменить атрибут человека. Если человек меняет фамилию, то заносится новая запись... Предисловию конец.

Структура таблицы 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 - тоже нельзя, потому что на самом деле там куча строк вылезает - отчество, имя, дедушка, бабушка и т.д.

И никак без временной таблицы не обойтись?
...
Рейтинг: 0 / 0
проблемы во вложенном запросе
    #32006847
Насколько я понял 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)
...
Рейтинг: 0 / 0
проблемы во вложенном запросе
    #32006849
skif
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Немножко неправильно сформулировал. Да, я не описал еще одно поле, tip, по которому можно определить, что это обе записи о фамилии.

tab_no pnt s tip cont
1 100 100 12 Иванов
1 102 130 12 Петров
1 101 100 13 Иван
1 103 100 14 Иванович

Сейчас попробую с пред. вариантом....
...
Рейтинг: 0 / 0
проблемы во вложенном запросе
    #32006870
skif
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо. Первой подсказки хватило.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / проблемы во вложенном запросе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]