![]() |
![]() |
![]() |
|
переделать в запрос | ☑ | ||
---|---|---|---|---|
0
zak555
27.02.14
✎
10:56
|
Есть некая тз, условно с колонками дата и чис
ПредЗнач = ""; ОтобраннаяТЗ = ТЗ.СкопироватьКолонки(); Для Каждого из Строка из ТЗ Цикла Если Строка.Чис <> ПредЗнач Тогда ПредЗнач = Строка.Чис; ЗаполнитьЗначенияСвойств(ОтобраннаяТЗ.Добавить(), Строка); КонецЕсли; КонецЦикла; как запросом отобрать тз, чтобы получить ОтобраннаяТЗ |
|||
1
vicof
27.02.14
✎
10:57
|
"Для Каждого из Строка из ТЗ Цикла"
думаю, не взлетит |
|||
2
Ненавижу 1С
гуру
27.02.14
✎
10:58
|
(0) загрузить ТЗ во временную таблицу, соединить саму с собой
|
|||
3
vicof
27.02.14
✎
10:59
|
ВЫБРАТЬ РАЗЛИЧНЫЕ, соединить с первой таблицей еще раз по отбранным полям
|
|||
4
zak555
27.02.14
✎
10:59
|
(2) как соединить ?
|
|||
5
Cube
27.02.14
✎
11:00
|
Я так понял, ему надо просто выбрать наименьшую дату по каждому числу... В запросе это как два пальца...
|
|||
6
zak555
27.02.14
✎
11:00
|
(1) ну пусть будет строчка
к тому же опечатки в 0 |
|||
7
Cube
27.02.14
✎
11:01
|
+(5) Наприер:
ВЫБРАТЬ МИНИМУМ(МояТЗ.Дата) КАК Дата, МояТЗ.Чис ИЗ &МояТЗ КАК МояТЗ СГРУППИРОВАТЬ ПО МояТЗ.Чис |
|||
8
zak555
27.02.14
✎
11:09
|
(7) и что у тебя вернёт на следующих данных
1 4 2 4 3 5 4 4 ? |
|||
9
zak555
27.02.14
✎
11:16
|
(3) выбрать только различные чис ?
|
|||
10
vicof
27.02.14
✎
11:19
|
(9) Ага
|
|||
11
zak555
27.02.14
✎
11:19
|
(10) а дальше ?
как соединять ? |
|||
12
vicof
27.02.14
✎
11:24
|
любым соединением, которое понравится, по тз.чис = отобраннаятз.чис
и для чистоты эксперимента, я бы сначала отсортировал тз по чис |
|||
13
Cube
27.02.14
✎
11:27
|
(8) Ну, во-первых исходная таблица такая:
01.01.2014 4 02.01.2014 4 03.01.2014 5 04.01.2014 4 А во-вторых, что, сам не знаешь что-ли? Вот это: 01.01.2014 4 03.01.2014 5 |
|||
14
zak555
27.02.14
✎
11:29
|
(12) пусть пример из 8
выбираем различные чис, суём во временную тз там будет 4 5 потом соединяем исходную со временной тз ? |
|||
15
zak555
27.02.14
✎
11:30
|
(13) а код из 0 вернёт
01.01.2014 4 03.01.2014 5 04.01.2014 4 |
|||
16
МойКодУныл
27.02.14
✎
11:33
|
(13) (15) тут вопрос что нужно автору. Просто уникальные значения чис с макс\мин датой, или "периоды стабильности". МОжет он решает задачку на собеседовании про курсы валют:), тут была недавно.
|
|||
17
zak555
27.02.14
✎
11:34
|
(16) по коду из 0 неясно, что нужно ?
|
|||
18
Cube
27.02.14
✎
11:35
|
(15) Ну тогда соединяй таблицы...
|
|||
19
МойКодУныл
27.02.14
✎
11:35
|
(17) нет. Не указана сотрировка таблицы. Может она упорядочена по полю "чис" - тогда запрос (8) вполне пойдет.
|
|||
20
zak555
27.02.14
✎
11:38
|
(18) как?
(19) ничего не отсортировано |
|||
21
Cube
27.02.14
✎
11:59
|
(20) "как?"
Не знаю :) |
|||
22
H A D G E H O G s
27.02.14
✎
12:00
|
Неясно, зачем нужен запрос.
|
|||
23
zak555
27.02.14
✎
12:01
|
(22) интересно , как реализовать
|
|||
24
H A D G E H O G s
27.02.14
✎
12:02
|
(23) см (0)
|
|||
25
catena
27.02.14
✎
12:03
|
(23)А жесткий порядок строк в таблице чем устаканен? Номера строк есть?
|
|||
26
Cube
27.02.14
✎
12:04
|
(25) Думаю, сортировка по дате там. Самое простое - это либо курсы валют, либо график работы сотрудника...
|
|||
27
zak555
27.02.14
✎
12:05
|
(25) у ТЗ же есть номер строки
+ можно считать первая колонка уникальна |
|||
28
zak555
27.02.14
✎
12:05
|
(26) а хоть числа
|
|||
29
catena
27.02.14
✎
12:07
|
(27)Т.е. первая колонка отсортирована по возрастанию и уникальна, правильно?
|
|||
30
EugeniaK
27.02.14
✎
12:07
|
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ | ТЗ.ПолеДата, | ТЗ.ПолеЧисло |ПОМЕСТИТЬ ВТ_ТЗ |ИЗ | &ТЗ КАК ТЗ |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ_ТЗ.ПолеДата, | МИНИМУМ(ВТ_ТЗ_МИН.ПолеДата) КАК ПолеДатаСледующая, | ВТ_ТЗ.ПолеЧисло |ПОМЕСТИТЬ ВТ_Даты |ИЗ | ВТ_ТЗ КАК ВТ_ТЗ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ТЗ КАК ВТ_ТЗ_МИН | ПО ВТ_ТЗ.ПолеДата < ВТ_ТЗ_МИН.ПолеДата | |СГРУППИРОВАТЬ ПО | ВТ_ТЗ.ПолеДата, | ВТ_ТЗ.ПолеЧисло |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | isnull(ВТ_ТЗ.ПолеДата,ВТ_Даты.ПолеДата) КАК ПолеДата, | isnull(ВТ_ТЗ.ПолеЧисло,ВТ_Даты.ПолеЧисло) КАК ПолеЧисло |ИЗ | ВТ_Даты КАК ВТ_Даты | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ТЗ КАК ВТ_ТЗ | ПО ВТ_Даты.ПолеДатаСледующая = ВТ_ТЗ.ПолеДата | И ВТ_Даты.ПолеЧисло <> ВТ_ТЗ.ПолеЧисло"; Запрос.УстановитьПараметр("ТЗ",ТЗ); ОтобраннаяТЗ= Запрос.Выполнить().Выгрузить(); |
|||
31
catena
27.02.14
✎
12:13
|
Если (29), тогда так
Выбрать ДатаВремя(2014,1,1) как Д, 4 как чис Поместить ТЗ Объединить все Выбрать ДатаВремя(2014,1,2), 4 Объединить все Выбрать ДатаВремя(2014,1,3), 5 Объединить все Выбрать ДатаВремя(2014,1,4), 4; Выбрать СПредыдущим.Д,СПредыдущим.чис из (Выбрать тз.Д,тз.чис, Максимум(тз2.Д) как предД из тз как тз левое соединение тз как тз2 по тз.Д>тз2.Д Сгруппировать по тз.Д,тз.Чис) как СПредыдущим левое соединение тз как тз2 по СПредыдущим.предД=тз2.Д где СПредыдущим.чис<>ЕстьNULL(тз2.чис,"") |
|||
32
Cube
27.02.14
✎
12:14
|
(31) Жескач... От руки набирала что-ли?))
|
|||
33
catena
27.02.14
✎
12:15
|
(32)ну с выдуманными таблицами от руки быстрее))
|
|||
34
Cube
27.02.14
✎
12:16
|
(33) Зверюга... :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |