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