Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / [игнор отключен] [закрыт для гостей] / Помогите с BETWEEN в запросе / 17 сообщений из 17, страница 1 из 1
27.05.2010, 12:39
    #36652522
Помогите с BETWEEN в запросе
В 1С при написании запроса возникла необходимость использовать подзапрос для нахождения минимального значения для ограничения общей выборки.

Запрос, который отлично работает в MS SQL:
Код: plaintext
1.
2.
3.
4.
5.
6.
select *
from tbl
where tbl.price between 
          (select min(price)+ 2  from Prices) 
        and 
          (select Avg(price)- 1  from Prices) 

1С не воспринимается, говорит, что синтаксическая ошибка.

есть ли обходной путь для использования конструкции типа

Код: plaintext
 ...ГДЕ  Поле = (Выбрать Минимум(...) ИЗ ...) ...
...
Рейтинг: 0 / 0
27.05.2010, 12:44
    #36652536
Господин ПЖ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с BETWEEN в запросе
не ГДЕ, а ИМЕЮЩИЕ... книги по языку запросов будет вася читать?
...
Рейтинг: 0 / 0
27.05.2010, 12:49
    #36652558
Помогите с BETWEEN в запросе
Господин ПЖне ГДЕ, а ИМЕЮЩИЕ... книги по языку запросов будет вася читать?

а мне, васе, группировать данные не надо, хотя за идею спасибо.

в мсскл для такого запроса having использовать не надо. Может в 1с есть более красивый способ обращаться к данным, извлеченным из подзапросов?
...
Рейтинг: 0 / 0
27.05.2010, 12:50
    #36652562
Господин ПЖ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с BETWEEN в запросе
"ВЫБРАТЬ
| АвансовыйОтчет.Ссылка
|ИЗ
| Документ.АвансовыйОтчет КАК АвансовыйОтчет
|
|СГРУППИРОВАТЬ ПО
| АвансовыйОтчет.Ссылка
|
|ИМЕЮЩИЕ
| АвансовыйОтчет.СуммаДокумента МЕЖДУ МИНИМУМ(АвансовыйОтчет.СуммаДокумента) + 2 И СРЕДНЕЕ(АвансовыйОтчет.СуммаДокумента) - 1"
...
Рейтинг: 0 / 0
27.05.2010, 12:51
    #36652567
Господин ПЖ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с BETWEEN в запросе
>а мне, васе, группировать данные не надо

а кому это интересно... min и прочее - агрегатные функции
...
Рейтинг: 0 / 0
27.05.2010, 12:52
    #36652573
Господин ПЖ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с BETWEEN в запросе
>Может в 1с есть более красивый способ обращаться к данным, извлеченным из подзапросов?

а где тут был подзапрос?
...
Рейтинг: 0 / 0
27.05.2010, 12:56
    #36652585
Помогите с BETWEEN в запросе
Господин ПЖ"ВЫБРАТЬ
| АвансовыйОтчет.Ссылка
|ИЗ
| Документ.АвансовыйОтчет КАК АвансовыйОтчет
|
|СГРУППИРОВАТЬ ПО
| АвансовыйОтчет.Ссылка
|
|ИМЕЮЩИЕ
| АвансовыйОтчет.СуммаДокумента МЕЖДУ МИНИМУМ(АвансовыйОтчет.СуммаДокумента) + 2 И СРЕДНЕЕ(АвансовыйОтчет.СуммаДокумента) - 1"


Не совсем к условию задачи подходит. Минимальное значение берется совершенно из другой таблицы. Для этого и строится подзапрос
...
Рейтинг: 0 / 0
27.05.2010, 12:57
    #36652589
Помогите с BETWEEN в запросе
Господин ПЖ>Может в 1с есть более красивый способ обращаться к данным, извлеченным из подзапросов?

а где тут был подзапрос?

Вот где:

Код: plaintext
1.
2.
3.
4.
where tbl.price between 
          (select min(price)+ 2  from Prices) 
        and 
          (select Avg(price)- 1  from Prices) 
...
Рейтинг: 0 / 0
27.05.2010, 13:15
    #36652647
Господин ПЖ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с BETWEEN в запросе
гм. не прет МЕЖДУ(ВЫБРАТЬ ) И (ВЫБРАТЬ)
...
Рейтинг: 0 / 0
27.05.2010, 14:10
    #36652886
Господин ПЖ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с BETWEEN в запросе
как-то извращенно:

ВЫБРАТЬ
1 КАК Поле1
ПОМЕСТИТЬ еее

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
3

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
4
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
СРЕДНЕЕ(еее.Поле1) КАК Поле1
ПОМЕСТИТЬ Сред
ИЗ
еее КАК еее
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
МИНИМУМ(еее.Поле1) КАК Поле1
ПОМЕСТИТЬ Мин
ИЗ
еее КАК еее
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
Мин.Поле1
ИЗ
(ВЫБРАТЬ
еее.Поле1 КАК Поле1
ИЗ
еее КАК еее
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Мин КАК Мин
ПО еее.Поле1 >= Мин.Поле1) КАК Мин
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
еее.Поле1 КАК Поле1
ИЗ
еее КАК еее
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Сред КАК Сред
ПО еее.Поле1 <= Сред.Поле1) КАК Сред
ПО Мин.Поле1 = Сред.Поле1
...
Рейтинг: 0 / 0
27.05.2010, 14:21
    #36652943
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с BETWEEN в запросе
ну блин склщики жгут ...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
запрос=новый Запрос;
Запрос.текстзапроса="Выбрать Минимум(Цена) КАК мин,Среднее(Цена) КАК Сред   из Таблица1";
Выборка=запрос.выполнить.выбрать();
Выборка.следущий(); мин=Выборка.мин+ 2 ; Сред=Выборка.Сред- 1 ;
Запрос.установитьпараметер("Мин",Мин);
Запрос.установитьпараметер("Сред",Сред);
запрос.текстзапроса="выбрать * из таблица2 Где сумма между &мин и &Сред";
Выборка=запрос.выполнить.выбрать();

америка - для американцев ...
...
Рейтинг: 0 / 0
27.05.2010, 14:29
    #36652979
Помогите с BETWEEN в запросе
Господин ПЖ,

:)

Вот только к моей задаче не подходит. пример что вначале - это упрощенная схема для наглядности.

Задача такая:
В регистре сведений РегистрСведений.РаботникиОрганизаций есть поле - График - значение этого поля показывает по какому графику сотрудник ходит на работу. На первое число месяца система ставит ему график автоматически. Теперь если в течении месяца сотруднику меняли график, то в регистре по сотруднику добавляется запись, типа период - 05.04.2010, Иванов, График 27.

Требуется сформировать выборку по сотруднику за определенный месяц, в которой на каждый день этого месяца будет ясно, по какому графику ходил сотрудник.
Например, по Иванову в регистре было
Код: plaintext
1.
2.
3.
 01 . 04 . 2010  Иванов График  1 
 08 . 04 . 2010  Иванов График  5 
 19 . 04 . 2010  Иванов График  3 

То выборка должна быть
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 01 . 04 . 2010  Иванов График  1 
 02 . 04 . 2010  Иванов График  1 
 03 . 04 . 2010  Иванов График  1 
 04 . 04 . 2010  Иванов График  1 
 08 . 04 . 2010  Иванов График  5 
 09 . 04 . 2010  Иванов График  5 
 10 . 04 . 2010  Иванов График  5 
 11 . 04 . 2010  Иванов График  5 
 12 . 04 . 2010  Иванов График  5 
...
 18 . 04 . 2010  Иванов График  5 
 19 . 04 . 2010  Иванов График  3 
 20 . 04 . 2010  Иванов График  3 
 21 . 04 . 2010  Иванов График  3 
...
 30 . 04 . 2010  Иванов График  3 


Задача несложная, и я по привычке написал что-то вроде этого:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
ВЫБРАТЬ
    РО.Период,
    РО.ГрафикРаботы,
    РО.Физлицо,
    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря
ИЗ
    РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь,
    РегистрСведений.РаботникиОрганизаций КАК РО
ГДЕ
    РО.Физлицо = &Физлицо
    И (РО.Период МЕЖДУ &нач И &окн
            ИЛИ РО.Период В
                (ВЫБРАТЬ
                    РаботникиОрганизацийСрезПоследних.Период
                ИЗ
                    РегистрСведений.РаботникиОрганизаций.СрезПоследних(&нач, ) КАК РаботникиОрганизацийСрезПоследних
                ГДЕ
                    РаботникиОрганизацийСрезПоследних.Физлицо = &Физлицо))
    И РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &нач И &окн И
    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря >= РО.Период и
    
    
РегламентированныйПроизводственныйКалендарь.ДатаКалендаря < 
        (ВЫБРАТЬ Минимум(pp.Период) как КонецПериода
    ИЗ РегистрСведений.РаботникиОрганизаций КАК pp
    ГДЕ pp.Период > РО.Период и РО.Физлицо = &Физлицо)


и вот там где жирным выделено - возникает ошибка.
Вот ищу простой способ решения проблемы.
...
Рейтинг: 0 / 0
27.05.2010, 14:35
    #36653004
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с BETWEEN в запросе
Код: plaintext
РегистрСведений.РаботникиОрганизаций КАК РО
кажется это -2 бала на сертификации по платформе ...
таблица имеет передодичность
ладно не важно
...
Рейтинг: 0 / 0
27.05.2010, 15:40
    #36653261
Господин ПЖ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с BETWEEN в запросе
ага. Теперь более менее понятно. Такая ботва если не ошибаюсь называется срез последних на каждую дату
...
Рейтинг: 0 / 0
27.05.2010, 16:42
    #36653446
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с BETWEEN в запросе
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
Запрос.Текст=
	"ВЫБРАТЬ
	|	основа.ДатаКалендаря КАК ДатаКалендаря,
	|	КурсыВалют.Валюта,
	|	КурсыВалют.Курс,
	|	КурсыВалют.Кратность
	|ИЗ
	|	(ВЫБРАТЬ
	|		Календарь.ДатаКалендаря КАК ДатаКалендаря,
	|		МАКСИМУМ(Курсы.Период) КАК Период,
	|		Курсы.Валюта КАК Валюта
	|	ИЗ
	|		(ВЫБРАТЬ
	|			РегламентированныйПроизводственныйКалендарь.ДатаКалендаря КАК ДатаКалендаря
	|		ИЗ
	|			РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
	|		ГДЕ
	|			РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &Д1 И &Д2) КАК Календарь
	|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
	|				КурсыВалют.Период КАК Период,
	|				КурсыВалют.Валюта КАК Валюта
	|			ИЗ
	|				РегистрСведений.КурсыВалют КАК КурсыВалют
	|			ГДЕ
	|				КурсыВалют.Период <= &Д2) КАК Курсы
	|			ПО Календарь.ДатаКалендаря >= Курсы.Период
	|	
	|	СГРУППИРОВАТЬ ПО
	|		Календарь.ДатаКалендаря,
	|		Курсы.Валюта) КАК основа
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
	|		ПО основа.Период = КурсыВалют.Период
	|			И основа.Валюта = КурсыВалют.Валюта
	|
	|СГРУППИРОВАТЬ ПО
	|	основа.ДатаКалендаря,
	|	КурсыВалют.Валюта,
	|	КурсыВалют.Курс,
	|	КурсыВалют.Кратность
	|
	|УПОРЯДОЧИТЬ ПО
	|	ДатаКалендаря";

продолжаем постить ...
...
Рейтинг: 0 / 0
27.05.2010, 16:50
    #36653464
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с BETWEEN в запросе
кстати ... слово между - явно отдыхает ?
...
Рейтинг: 0 / 0
28.05.2010, 09:39
    #36654603
Помогите с BETWEEN в запросе
leaf,
пасибо большое, то что и требовалось.
...
Рейтинг: 0 / 0
Форумы / [игнор отключен] [закрыт для гостей] / Помогите с BETWEEN в запросе / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]