powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос по Transact SQL
11 сообщений из 11, страница 1 из 1
Вопрос по Transact SQL
    #32009910
Максим
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Недавно начал работать с MS-SQL. Подскажите люди добрые - есть ли в Transact SQL аналог for each структур? Т.е. мне нужно чтобы для каждой записи в одной таблице, находилось поле с максимальной датой в другой таблице и оно возвращалось. Идеально если бы удало создать таким образом view. Не знают ли многоуважаемые специалисты как это здаелать.
...
Рейтинг: 0 / 0
Вопрос по Transact SQL
    #32009913
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для организации циклов можно использовать только WHILE.

А для твоей задачи отдельной таблицы скорее всего не нужно - делается запросом по исходной таблице. Только ты объясни пояснее, с максимальнной датой среди каких дат? Если на одну запись таблицы одна дата, тогда не понятно применение термина "максимиальной".
...
Рейтинг: 0 / 0
Вопрос по Transact SQL
    #32009914
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Максим
Вы мыслите категориями ООП, а T-SQL оперирует множествами.
В вашем случае будет что-то типа:

select t1.*, t2.max(ПолеСДатой) from ОднаТаблица t1, ДругаяТаблица t2 where t1.ID = t2.ID

Такого типа запрос возможно и не подойдет Вам, но уж очень общее описание задачи
...
Рейтинг: 0 / 0
Вопрос по Transact SQL
    #32009927
Максим
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача такая. Есть таблица с клиентами. у каждого клиента есть счет - это ключ. Есть другая таблица со списком операций над счетами по датам. необходимо для каждого клиента по его номеру счета найти запись во второй таблице с максимальной датой.
...
Рейтинг: 0 / 0
Вопрос по Transact SQL
    #32009929
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select t3.* from Клиент t1, Счет t2, Операция t3
where t1.КлиентID = t2.КлиентID
and t2.СчетID = t3.СчетID
and t3.Дата = (select max(Дата) from Операция where Операция.СчетID = t2.СчетID)

Что то типа этого
...
Рейтинг: 0 / 0
Вопрос по Transact SQL
    #32009964
Fompro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрите ещё в Форуме: был топик о поиске остатка на конкретную дату - Вам пригодится.
...
Рейтинг: 0 / 0
Вопрос по Transact SQL
    #32009968
Hard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Максим
как я тебя понял в одной таблице у тебя имена клиентов, а в другой их счета. И в одной и в другой есть ключевое поле идентифицирущее клиентов и в той и в другой таблици. Так?
В таком слуции не стоит раздувать слона из мухи. Можно сделать все на много проще.
[hr]
Построй связь между этими таблицами по полям идентификации клиента, как я понял из твоих слов это будет связь один ко многому (одна запись в таблице клиентов и множество связий в таблици счетов).
А потом делать запрос с такиме же критериями как выше уже говорилось, только место WHERE можешь использовать объединение ( inner , left или right join ).
Этот подход удобней в том плане что при этом используется объединение на уровне таблици а не запроса.
...
Рейтинг: 0 / 0
Вопрос по Transact SQL
    #32009969
Hard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Максим
как я тебя понял в одной таблице у тебя имена клиентов, а в другой их счета. И в одной и в другой есть ключевое поле идентифицирущее клиентов и в той и в другой таблици. Так?
В таком слуции не стоит раздувать слона из мухи. Можно сделать все на много проще.
[hr]
Построй связь между этими таблицами по полям идентификации клиента, как я понял из твоих слов это будет связь один ко многому (одна запись в таблице клиентов и множество связий в таблици счетов).
А потом делать запрос с такиме же критериями как выше уже говорилось, только место WHERE можешь использовать объединение ( inner , left или right join ).
Этот подход удобней в том плане что при этом используется объединение на уровне таблици а не запроса.
...
Рейтинг: 0 / 0
Вопрос по Transact SQL
    #32009970
Hard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пример:
\n Select t1.*, MAX (t2.dates)
From t1
Inner Join t2 On t1.id=t2.id
Group By t1.*

Используй оператор Group by когда используешь итоговые функции.
...
Рейтинг: 0 / 0
Вопрос по Transact SQL
    #32009975
Fompro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Hard
1.Ну и что он получит сообразно условиям задачи?
2.А я, дурак, всю жизнь в SELECT c GROUP BY столбцы перечислял ...
...
Рейтинг: 0 / 0
Вопрос по Transact SQL
    #32010081
Lexx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насколько я понял Максим иммет ввиду for each .. next из IB database
так вот если нужна аналогичная конструкция то можно использовать переменные типа CURSOR
пример:
DECLARE @f1, @f2 datatype
DECLARE cursor1 CURSOR FOR
SELECT field1,field2 FROM table1 WHERE fieldN=.....
OPEN cursor1
FETCH NEXT FROM cursor1
INTO @f1, @f2
WHILE @@FETCH_STATUS = 0

-- ЧТО-НИБУДЬ

FETCH NEXT FROM cursor1
INTO @f1, @f2
END

CLOSE cursor1
DEALLOCATE cursor1
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос по Transact SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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