| 
    
        
     
     | 
    
    
  | 
Выбрать предыдущую запись в запросе | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        alexmobile    
     03.09.15 
            ✎
    07:08 
 | 
         
        Из таблицы выбираются значения на определенные даты, если значение не задано на дату, то брать предыдущее. Не могу сообразить как составить запрос.
 
        пример: Дата,код инструмента, значение 01.01.2015, Инстр1, 100 01.01.2015, Инстр2, 500 02.01.2015, Инстр1, 1000 02.01.2015, Инстр2, 0 нужно на 02.01.2015 для инстр2 получить с даты 01.01.2015, т.е. 500  | 
|||
| 
    1
    
        Маратыч    
     03.09.15 
            ✎
    07:10 
 | 
         
        (0) Что за таблица-то? Если РС, то СрезПоследних(), если что-то другое, тупо отбирай Значение>0     
         | 
|||
| 
    2
    
        Брегорьян    
     03.09.15 
            ✎
    07:10 
 | 
         
        делай лучше потом     
         | 
|||
| 
    3
    
        alexmobile    
     03.09.15 
            ✎
    07:14 
 | 
         
        (1) внешние данные     
         | 
|||
| 
    4
    
        Cyberhawk    
     03.09.15 
            ✎
    07:14 
 | 
         
        Выбираешь всю таблицу с доп. полем: где значение не задано, там в доп. поле пишешь 0, где задано - 1. Далее выбираешь первые 1 с условием на доп. поле ( = 1)     
         | 
|||
| 
    5
    
        Cyberhawk    
     03.09.15 
            ✎
    07:15 
 | 
         
        Либо изначально отбираешь по значению, как в (1), и группируешь по инструменту и максимуму периода     
         | 
|||
| 
    6
    
        alexmobile    
     03.09.15 
            ✎
    15:25 
 | 
         
        (5) не пойдет.
 
        вот кусок таблицы: CodeInstr Date Среднее ГодНазад A592UFM060F 26.12.2014 0:00:00 31 404 A592UFM060F 09.01.2015 0:00:00 29 200 A592UFM060F 10.01.2015 0:00:00 29 200 A592UFM060F 12.01.2015 0:00:00 31 529 A592UFM060F 13.01.2015 0:00:00 31 400 29 200 A592UFM060F 14.01.2015 0:00:00 31 300 29 264 A592UFM060F 15.01.2015 0:00:00 31 000 29 396 A592UFM060F 16.01.2015 0:00:00 31 000 29 413 A592UFM060F 17.01.2015 0:00:00 29 559 A592UFM060F 19.01.2015 0:00:00 30 500 A592UFM060F 20.01.2015 0:00:00 29 500 29 614 A592UFM060F 21.01.2015 0:00:00 29 200 30 099 A592UFM060F 22.01.2015 0:00:00 28 135 30 730 A592UFM060F 23.01.2015 0:00:00 28 000 31 244 A592UFM060F 24.01.2015 0:00:00 31 167 A592UFM060F 26.01.2015 0:00:00 28 000 A592UFM060F 27.01.2015 0:00:00 28 400 31 150 A592UFM060F 28.01.2015 0:00:00 28 180 31 150 A592UFM060F 29.01.2015 0:00:00 28 000 31 000 A592UFM060F 30.01.2015 0:00:00 28 000 31 039 A592UFM060F 31.01.2015 0:00:00 31 054 A592UFM060F 02.02.2015 0:00:00 28 000 A592UFM060F 03.02.2015 0:00:00 27 650 31 092 A592UFM060F 04.02.2015 0:00:00 28 217 31 147 A592UFM060F 05.02.2015 0:00:00 28 587 31 045 A592UFM060F 06.02.2015 0:00:00 28 524 31 097 в колонку среднее на дату 09.01 и 10.01 должно встать 31404, на дату 17.01 31 000, 24.01 28 000 и т.д.  | 
|||
| 
    7
    
        Cyberhawk    
     03.09.15 
            ✎
    17:13 
 | 
         
        Не понял. Входную таблицу твою вижу. Часть примера вижу. Но не понял, как формируется выходная таблица? Почему даты выборочно берешь? Нарисуй, какой должна быть выходная таблица и опиши правила ее формирования до конца     
         | 
|||
| 
    8
    
        Nuobu    
     03.09.15 
            ✎
    17:24 
 | 
         
        (6) Разбей свою таблицу на две таблички, заполненную датами и не заполненную и сделай как в ссылке.
 
        Книга знаний: Срез последних на каждую дату в запросе  | 
|||
| 
    9
    
        AndreYAN    
     03.09.15 
            ✎
    17:25 
 | 
         
        Итоги по датам не предлагали?     
         | 
|||
| 
    10
    
        Nuobu    
     03.09.15 
            ✎
    17:26 
 | 
         
        (9) Ха, поздно.     
         | 
|||
| 
    11
    
        AndreYAN    
     03.09.15 
            ✎
    17:33 
 | 
         
        Запрос = Новый Запрос("ВЫБРАТЬ
 
        | ИсточникДанных.Дата КАК Дата, | ИсточникДанных.Номенклатура КАК Номенклатура, | ИсточникДанных.Количество КАК Количество |ИЗ Данные КАК ИсточникДанных |ИТОГИ | СУММА(Количество) |ПО | Дата"); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДата = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); ПредыдущееКоличество = 0; Пока ВыборкаДата.Следующий() Цикл ВыборкаДетальныеЗаписи = ВыборкаДата.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл ПредыдущееКоличество = ВыборкаДетальныеЗаписи.Количество; КонецЦикла; КонецЦикла;  | 
|||
| 
    12
    
        alexmobile    
     04.09.15 
            ✎
    07:27 
 | 
         
        (11) в СКД хотелось-бы. Такой уж вариант думал, но на крайний случай.     
         | 
|||
| 
    13
    
        alexmobile    
     04.09.15 
            ✎
    07:27 
 | 
         
        (8) срезы актуальны для регистров. нет?     
         | 
|||
| 
    14
    
        Sewace    
     04.09.15 
            ✎
    08:38 
 | 
         
        Итак, нужно выбрать предыдущую строку в выборке.
 
        Значит: 1. Есть точное условие сортировки. 2. Есть возможность, наложив условие, выбрать текущую запись. Делал бы так: ВЫБРАТЬ ПЕРВЫЕ 2 .... ПОМЕСТИТЬ ВремТЗ ИЗ ... ГДЕ <условие на текущую запись> УПОРЯДОЧИТЬ ПО <порядок в одну сторону>; ВЫБРАТЬ ПЕРВЫЕ 1 ИЗ ВремТЗ УПОРЯДОЧИТЬ ПО <порядок в другую сторону>  | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |