|
Задача по СКД | ☑ | ||
---|---|---|---|---|
0
NewTesla
25.09.15
✎
19:00
|
Всем хелло! Не так давно, проходил тестирование на собеседовании попалась такая задачка
Создать отчет "Динамика курсов валют" на языке запросов (можно с СКД) и картинка Валюты Даты 01.01.2001 02.01.2001 03.01.2001 USD 180 181.5 (+1.5) 185 (+3.5) RUB 3.5 3.5 (=) 3.4 (-0.4) Скд я спринципе знаю, но скоро еще одно собеседование и может попасться такаяже задачка (сейчас изучаю курс гилева по СКД) подкиньте идею пжл как решить данную задачу Я представляю так- есть регистр сведений курс валют, зпдпется период (Периодами) выводится в колонке период. НО!!! Как сравнивать данные с предыдущим периодом? (например данные дня 02.01.2001 с данными дня 01.01.2001) |
|||
1
ГдеСобака Зарыта
25.09.15
✎
19:07
|
||||
2
NewTesla
25.09.15
✎
19:09
|
(1) о, спасибо, щас будем посмотреть)
|
|||
3
NewTesla
25.09.15
✎
19:32
|
чето я там нашел не понятно написано
Суть решения заключается в использовании функции языка выражений СКД ВычислитьВыражение() в добавленном вычисляемом поле, которое я назвал Дельта. У функции следующие параметры: Параметры: Выражение. Тип Строка; Группировка. Тип Строка; ТипРасчета. Тип Строка; Начало. Строка, содержащая одно из вариантов; Конец. Строка, содержащая одно из вариантов; Сортировка. Строка; ИерархическаяСортировка; ОбработкаОдинаковыхЗначенийПорядка Нас интересует 4 и 5 параметр (Начало и Конец). Выражение будет выглядеть следующим образом: isNULL((ВЫЧИСЛИТЬВЫРАЖЕНИЕ("Цена", , , "Предыдущая", "Предыдущая") - Цена), 0) - здесь вычисляем предыдущее значение поля Цена и из него вычитаем текущее значение поля Цена. Естественно, для первой записи предыдущее значение не будет вычислено и результат вычитания со значением текущего поля будет Null, поэтому что бы все было «чисто» используем функцию isNULL(естьNull), чтобы преобразовать Null в число ноль. |
|||
4
NewTesla
25.09.15
✎
19:34
|
Т.е мне надо создать набор записей , по таблице СрезПоследних регистра "Курсы валют" Период=День, потом этот период выводить, а сравнивать с предыдущим с помощью выражения?
|
|||
5
bootini
25.09.15
✎
19:41
|
Хоть так:
ВЫБРАТЬ КурсыВалют.Период, КурсыВалют.Валюта, КурсыВалют.Курс, КурсыВалют.Кратность ПОМЕСТИТЬ КурсыВалют ИЗ РегистрСведений.КурсыВалют КАК КурсыВалют ГДЕ КурсыВалют.Период МЕЖДУ &ДатаНачала И &ДатаОкончания ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ КурсыВалют.Период, КурсыВалют.Валюта, КурсыВалют.Курс, ЕСТЬNULL(КурсыВалют1.Курс, 0) - КурсыВалют.Курс КАК Дельта ИЗ КурсыВалют КАК КурсыВалют ЛЕВОЕ СОЕДИНЕНИЕ КурсыВалют КАК КурсыВалют1 ПО КурсыВалют.Валюта = КурсыВалют1.Валюта И (ДОБАВИТЬКДАТЕ(КурсыВалют.Период, ДЕНЬ, 1) = КурсыВалют1.Период) СГРУППИРОВАТЬ ПО КурсыВалют.Период, КурсыВалют.Валюта, КурсыВалют.Курс, ЕСТЬNULL(КурсыВалют1.Курс, 0) - КурсыВалют.Курс |
|||
6
NewTesla
25.09.15
✎
19:47
|
(5) О, круто! Спасибо! Щас попробую
(умное решение, кстати) |
|||
7
bootini
25.09.15
✎
19:57
|
А так правильно(т.к курс может не на каждый день быть):
ВЫБРАТЬ КурсыВалют.Период, КурсыВалют.Валюта, КурсыВалют.Курс, КурсыВалют.Кратность ПОМЕСТИТЬ КурсыВалют ИЗ РегистрСведений.КурсыВалют КАК КурсыВалют ГДЕ КурсыВалют.Период МЕЖДУ &ДатаНачала И &ДатаОкончания ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ КурсыВалют.Период, МИНИМУМ(КурсыВалют1.Период) КАК ПериодСледующий ПОМЕСТИТЬ Периоды ИЗ КурсыВалют КАК КурсыВалют ЛЕВОЕ СОЕДИНЕНИЕ КурсыВалют КАК КурсыВалют1 ПО КурсыВалют.Валюта = КурсыВалют1.Валюта И КурсыВалют.Период < КурсыВалют1.Период СГРУППИРОВАТЬ ПО КурсыВалют.Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ КурсыВалют.Период, КурсыВалют.Валюта, КурсыВалют.Курс, Периоды.ПериодСледующий ПОМЕСТИТЬ КурсСПериодом ИЗ КурсыВалют КАК КурсыВалют ЛЕВОЕ СОЕДИНЕНИЕ Периоды КАК Периоды ПО КурсыВалют.Период = Периоды.Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ КурсСПериодом.Период, КурсСПериодом.Валюта, КурсСПериодом.Курс, ЕСТЬNULL(КурсыВалют.Курс, 0) - КурсСПериодом.Курс КАК Дельта ИЗ КурсСПериодом КАК КурсСПериодом ЛЕВОЕ СОЕДИНЕНИЕ КурсыВалют КАК КурсыВалют ПО КурсСПериодом.ПериодСледующий = КурсыВалют.Период И КурсСПериодом.Валюта = КурсыВалют.Валюта |
|||
8
NewTesla
26.09.15
✎
06:44
|
а средствами СКД как это сделать?
|
|||
9
NewTesla
26.09.15
✎
06:44
|
* т.е мож какие доп. настройки есть)
|
|||
10
Лодырь
26.09.15
✎
07:17
|
(9) А что непонятного в СКД то? Ты уже в 3 все сделал по сути.
|
|||
11
NewTesla
26.09.15
✎
07:54
|
(10) Ну текущий курс понятно, берется из текузщего запроса по Срезу Последних, а предыдущий откуда брать? Т.е как сам запрос прописать, чтобы использовать предыдущий курс?
|
|||
12
echo77
26.09.15
✎
08:03
|
(11) Срез последних не пойдет
|
|||
13
echo77
26.09.15
✎
08:04
|
В моей статье(http://catalog.mista.ru/public/267055/)
ВЫЧИСЛИТЬВЫРАЖЕНИЕ("Цена", , , "Предыдущая", "Предыдущая") - Цена - данное выражение рассчитывает разницу текущей и предыдущей цены |
|||
14
echo77
26.09.15
✎
08:10
|
catalog.mista.ru - своя таблица стилей? Почему-то шрифт Times new roman, а не Tahoma(или что там в оригинале на инфостарте?)
|
|||
15
NewTesla
26.09.15
✎
08:18
|
(12) т.е запрос надо строить по самой таблице регистра "курсы валют"? т.е откуда прать предыдущий курс, для вычисления)
|
|||
16
echo77
26.09.15
✎
08:26
|
(15) В самом названии отчета "Динамика ..." уже есть подсказка, что нужно брать все записи за период, а не срез/остатки
|
|||
17
echo77
26.09.15
✎
08:41
|
||||
18
echo77
26.09.15
✎
08:43
|
(17) Вот рабочая ссылка: https://yadi.sk/i/Gwj335oGjKzaV
|
|||
19
echo77
26.09.15
✎
08:44
|
На выходных включу этот пример в статью: http://catalog.mista.ru/public/267055/
|
|||
20
NewTesla
27.09.15
✎
08:09
|
(18) да, мне надо такой вид)
щас буду ваять) |
|||
21
echo77
28.09.15
✎
17:53
|
(20) Как успехи?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |