![]() |
|
Составить запрос | ☑ | ||
---|---|---|---|---|
0
Csar
05.02.14
✎
17:26
|
Всем привет.
Помогите, пожалуйста, сформировать текст запроса, который делал бы выборку из регистра сведений (непериодический) с ограничением по дате документа (Документ - это поле регистра, а дата документа - обязательный параметр). Пример регистра такой (примерная расшифровка полей): "Номенклатура/Документ/ОстальныеПоля" Нужно выбрать все записи за определенный период (по дате документа как поля), НО бывают записи с одинаковыми полями "Номенклатура", но разными полями "Документ". Так вот нужно, что бы в выборку попадали записи регистра с неповторяющимися полями "Номенклатура" и, в случае, если существует две или более записи с одинаковыми полями "Номенклатура", то нужно брать запись с наиболее поздней датой поля "Документ", но также с проверкой на вхождение в указанный период. |
|||
1
Csar
05.02.14
✎
17:27
|
С запросом без условия на отсев лишних записей по полю Номенклатура нет никаких проблем, а вот как реализовать отсев дублированной номенклатуры, да еще и выбором записи с наиболее поздней датой Документа - это не могу реализовать
|
|||
2
Fram
05.02.14
✎
17:29
|
(1) классическая задачка. я такой запрос при приеме на работу задаю. практически аналог среза последних
|
|||
3
Csar
05.02.14
✎
17:57
|
(2) Для срезаПоследних - легко/ Подскажите, пожалуйста, общий алгоритм хотя бы
|
|||
4
salvator
05.02.14
✎
18:02
|
(3)
1. Выбираешь максимальную дату 2. Среди этих документов ищешь максимульную ссылку. 3. Соединяешь с таблицей регистра по этой ссылке. |
|||
5
Csar
05.02.14
✎
18:38
|
(4) Правильно ли я понимаю, что сначала выбираем дуплет типа "Номенклатура/Максимум(Дата)" из регистра с ограничениями на заданный период рассмотрения регистра. Затем делаем полноценную выборку с опять же наложением ограничения на рассматриваемый период и соединением с предыдущем выборкой по обоим полям?
|
|||
6
Csar
05.02.14
✎
18:40
|
+ (5). В конечном запросе видимо не нужно ставить ограничение на период, т.к. достаточно ограничения его в первом запросе?
|
|||
7
fisher
05.02.14
✎
18:41
|
Ограничений много не бывает.
Пропустил второй этап - он нужен, чтобы обработать ситуацию с несколькими доками в одной секунде. А так - да. Правильно понял. |
|||
8
Csar
05.02.14
✎
18:42
|
(7) я не понял второго пропущенного этапа
|
|||
9
Csar
05.02.14
✎
18:44
|
(7) я ведь рассматриваю выборку не просто по МаксДате, а по сочетанию Номенклатура/Дата.
|
|||
10
fisher
05.02.14
✎
18:45
|
А надо - Номенклатура/ПозицияДокумента
|
|||
11
Csar
05.02.14
✎
18:47
|
(10) а как это реализовать?
|
|||
12
Fram
05.02.14
✎
18:50
|
МоментВремени вроде есть в запросах
|
|||
13
Fram
05.02.14
✎
18:51
|
правда не знаю работает ли он в функции Максимум
|
|||
14
fisher
05.02.14
✎
18:53
|
Точно таким же приемом.
Как ты нашел максимальные даты - так же находишь максимальные ссылки в датах (соединение по номенклатуре и дате). После этого дата тебе уже не нужна. Соединяешь с исходным запросом по номенклатуре и ссылке. (13) Вроде нельзя. Это кажись просто функция навроде представления. Вычисляется уже сервером приложений при обработке результата запроса. |
|||
15
fisher
05.02.14
✎
18:54
|
Вру. Вычисляется в СУБД, но все равно ничего с ней не сделаешь.
|
|||
16
Fram
05.02.14
✎
18:55
|
+(13) похоже что нет
|
|||
17
Csar
05.02.14
✎
18:55
|
(14) Просто Номенклатура/МАКСИМУМ(Док.Ссылка) ?
|
|||
18
Csar
05.02.14
✎
18:57
|
(14) Тогда нужно больше этапов (4шт выходит)?
1) Выборка Номенклатура/МАКСИМУМ(Дата) 2) Выборка Номенклатура/Ссылка с соединением по Выборка из 1) 3) Выборка Номенклатура/МАКСИМУМ(Ссылка)с соединением по Выборка из 2) 4) Выборка итоговая с соединением по Выборка из 3) |
|||
19
Csar
05.02.14
✎
19:28
|
Ответа скорее всего я не дождусь. Поэтому спасибо большое отвечающим! Очень помогли.
|
|||
20
fisher
05.02.14
✎
19:49
|
(17) Номенклатура/МаксимальнаяДата/МАКСИМУМ(Док.Ссылка)
(18) 1) Номенклатура/МАКСИМУМ(Дата) 2) Номенклатура/МаксимальнаяДата/МАКСИМУМ(Ссылка) - в соединении п.1 и исходной таблицы 3) Соединение исходной таблицы с п.2 по Номенклатура/МаксимальнаяСсылкаВМаксимальнойДате |
|||
21
Csar
05.02.14
✎
20:12
|
(20) Спасибо!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |