|
Реализовать в запросе условие
|
Я
|
|
Штурман 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) левое соединение по неравенству, МИНИМУМ |
Molinor 5 - 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) я почему-то решил, что надо именно попарно разбить. Чтобы конец первого отрезка не был началом следующего. А это не так. |
Molinor 8 - 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.Период
УПОРЯДОЧИТЬ ПО
Начало |
Molinor 13 - 06.09.16 - 11:15 | |
Лефмихалыч 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) хватит писать бездумно:
СГРУППИРОВАТЬ ПО
Таблица.Данные,
Таблица.Период |
RomanYS 17 - 06.09.16 - 13:12 | Строки пронумеровать, соединять
по
Таблица.НомерСтроки = Таблица1.НомерСтроки+1
И Таблица.Данные = Таблица1.Данные |
Лефмихалыч 18 - 06.09.16 - 13:14 | надо было просто скопипастить один-в-один...
|