Имя: Пароль:
1C
1С v8
Реализовать в запросе условие
0 Штурман
 
05.09.16
08:21
Допустим, есть таблица

А   15.12.2012
А   07.06.2014
Б   14.04.2011
Б   18.09.2015
С   23.02.2015

Нужно чтобы в итоге получилась следующая таблица:

А   15.12.2012   07.06.2014
Б   14.04.2011   18.09.2015
С   23.02.2015

Т.е. если в первом столбце строки равны, то нижнюю значение следующей перекидываем в новый столбец.

Можно ли такое реализовать в запросе без помощи массива и таблицы значений?
1 В тылу врага
 
05.09.16
08:22
а если у А значений 10?
2 Штурман
 
05.09.16
08:27
(1) Вот тогда такая таблица должна получиться

Было
А   15.12.2012
А   07.06.2014
А   14.04.2011
А   18.09.2015
А   23.02.2015

Стало
А   15.12.2012   07.06.2014
А   07.06.2014   14.04.2011
А   14.04.2011   18.09.2015
А   18.09.2015   23.02.2015
А   23.02.2015
3 Лефмихалыч
 
05.09.16
08:32
(0) (2) если в таблице не будет поля, по которому можно отличить конец отрезка, то - хрена лысого.
4 В тылу врага
 
05.09.16
08:34
(2) левое соединение по неравенству, МИНИМУМ
5 Molinor
 
05.09.16
08:36
(3) Да почему же, во временной таблице считаем сколько строк для одинаковых значений из первого столбца. Потом эту ВТ цепляем к результату из (4) и если строк больше 1, то проверяем на нул левое соединение.
6 Лефмихалыч
 
05.09.16
08:37
хотя стоп, если 07.06..14.04 - это тоже отрезок, то (4) решение
7 Лефмихалыч
 
05.09.16
08:38
(5) я почему-то решил, что надо именно попарно разбить. Чтобы конец первого отрезка не был началом следующего. А это не так.
8 Molinor
 
05.09.16
08:41
(7) Да и попарно можно, поди. Чётность (порядковый номер) же записи можно получить в предварительно упорядоченном списке. Левым соединением все записи, которые меньше и считаем их. Вот и признак конца периода.
9 Штурман
 
05.09.16
08:49
Т.е. берем еще раз эту же таблицу и через левое соединение сравниваем по минимуму?
10 Лефмихалыч
 
05.09.16
09:15
(9)
ВЫБРАТЬ
  Т.Дата как Начало,
  МИНИМУМ(Т1.Дата) как Конец
ИЗ
   ТвояТаблица как Т
   ЛЕВОЕ СОЕДИНЕНИЕ ТвояТаблица как Т1
   ПО Т.Дата <Т1.Дата
СГРУППИРОВАТЬ ПО
Т.Дата
11 Штурман
 
05.09.16
09:18
всем спасибо )
12 Штурман
 
06.09.16
09:30
Что-то не особо работает условие в запросе

Была таблица:
06.05.2015  А
01.07.2015  А
01.01.2016  А
01.07.2016  А

Стала таблица:
06.05.2015    01.07.2015    А
06.05.2015    01.01.2016    А
06.05.2015    01.07.2016    А
01.07.2015    01.01.2016    А
01.07.2015    01.07.2016    А
01.01.2016    01.07.2016    А
01.07.2016                А

Сам запрос такой:


ВЫБРАТЬ
    Таблица.Период КАК Начало,
    Таблица1.Период КАК Окончание,
    Таблица.Данные
ИЗ
    РегистрСведений.Таблица КАК Таблица
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Таблица КАК Таблица1
        ПО Таблица.Период < Таблица1.Период
            И Таблица.Данные = Таблица1.Данные
ГДЕ
    Таблица.Период >= &Период

СГРУППИРОВАТЬ ПО
    Таблица.Данные,
    Таблица.Период,
    Таблица1.Период

УПОРЯДОЧИТЬ ПО
    Начало
13 Molinor
 
06.09.16
11:15
(12) А где минимум?
14 Лефмихалыч
 
06.09.16
11:36
(12) и не должно. Ты неправильно копипастил
15 Штурман
 
06.09.16
12:16
(13) (14)  Переписал, добавил Минимум:


ВЫБРАТЬ
    Таблица.Период КАК Начало,
    МИНИМУМ(Таблица1.Период) КАК Окончание,
    Таблица.Данные
ИЗ
    РегистрСведений.Таблица КАК Таблица
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Таблица КАК Таблица1
        ПО Таблица.Период < Таблица1.Период
            И Таблица.Данные = Таблица1.Данные
ГДЕ
    Таблица.Период >= &Период

СГРУППИРОВАТЬ ПО
    Таблица.Данные,
    Таблица.Период,
    Таблица1.Период

УПОРЯДОЧИТЬ ПО
    Начало


Результат такой же, как и в (12)
16 В тылу врага
 
06.09.16
13:03
(15) хватит писать бездумно:

СГРУППИРОВАТЬ ПО
    Таблица.Данные,
    Таблица.Период
17 RomanYS
 
06.09.16
13:12
Строки пронумеровать, соединять
по
Таблица.НомерСтроки = Таблица1.НомерСтроки+1
            И Таблица.Данные = Таблица1.Данные
18 Лефмихалыч
 
06.09.16
13:14
надо было просто скопипастить один-в-один...
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс