| 
    
            
         
         | 
    
  | 
Составить запрос | ☑ | ||
|---|---|---|---|---|
| 
    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) Спасибо!     
         | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |