Информация

Последние записи

Теги


Блоги


Записи из всех блогов на Sql.ru


Платежи с нарастающим итогом решение задачи

Блог: Oracle SQL
Одна из студенток просила помочь с задачей , задача интересная, поэтому предлагаю вашему вниманию.

Необходимо вывести все месяцы текущего года, с указанием клиента и суммы его платежей, отдельной колонкой
вывести сумму всех платежей клиента с начала года (нарастающий итог по клиенту с начала года). Если в каком-то
месяце клиент не платил, вывести 0


я так решил
create table pay1(userid number, dt date, paysum number);
insert into pay1 values(1, sysdate-10, 22);
insert into pay1 values(2, sysdate-20, 2);
insert into pay1 values(2, sysdate-90, 72);
insert into pay1 values(1, sysdate-50, 32);
insert into pay1 values(1, sysdate-50, 90);
insert into pay1 values(2, sysdate-70, 52);
insert into pay1 values(1, sysdate-50, 92);
insert into pay1 values(1, sysdate-10, 32);
insert into pay1 values(1, sysdate-90, 90);
insert into pay1 values(2, sysdate-90, 52);
insert into pay1 values(1, sysdate-150, 92);
insert into pay1 values(1, sysdate-110, 32);
 


Для нарастающего итога используется аналитическия функция SUM, с под запросом, нулевые значения создаем подзапросом с connect by level интервал дат задаем в конструкции connect by
в данном случае от 2019-05-01 до 2020-01-01

select userid,mn,yy,passum , sum(passum) over (partition by userid order by yy,mn) from ( 
    select userid , extract(month from dt) mn, extract(year from dt) yy, sum(pasum) passum from (
    select decode( userid,null, userid1, userid)  userid  , decode(dt,null,dt1,dt) dt , decode(paysum,null,0,paysum) pasum from pay1
     right join
    (
        select dt1,userid1 from
        (
            (select date'2019-05-01'+level-1 as dt1 from dual connect by level <= date'2020-01-01'-date'2019-05-01') dt
            cross join (select distinct userid userid1 from pay1) pay
        )) payd 
    on trunc(dt) = trunc(dt1) and userid = userid1   
    ) mzt group by userid, extract(month from dt), extract(year from dt) order by yy,mn
    ) tt1
автор: Myp3_u_K добавлено: 08 дек 19 просмотры: 55, комментарии: 0



Виртуальная реальность (а Кастанеда против Дойча :-)


Здесь, в течение квартала, будет разобрана глава из книги Д. Дойча о виртуальной реальности
автор: Програмер.Илюша добавлено: 13 ноя 19 просмотры: 531, комментарии: 0



Представляю сообществу свою книгу oracle sql

Блог: Oracle SQL
Попытался структурировать свои знания и опыт, получилось 600 страниц, прошу не быть строгими и критиковать аргументированно.
В электронном варианте книга бесплатна, 6 рублей - обязательная комиссия магазина, как я понял.
Oracle SQL. 100 шагов от новичка до профессионала. 20 дней новых знаний и практики
или печатная версия , но уже за деньги
Oracle SQL. 100 шагов от новичка до профессионала. 20 дней новых знаний и практики
Пользуйтесь.
автор: Myp3_u_K добавлено: 20 июл 19 просмотры: 3250, комментарии: 11



уже МИЛЛИОН!!! 1 000 000!

Блог: Oracle SQL
Просмотров

Сегодня 1718
В этом месяце 10530
Всего 1000003

Сегодня счетчик посещений моего блога превзошел миллион просмотров, что дальше ? Продолжаю вести курсы, публикую книгу , постараюсь и дальше радовать вас новыми интересными заметками, дорогие читатели.
С уважением, Чалышев Максим Михайлович.
автор: Myp3_u_K добавлено: 14 апр 19 просмотры: 3931, комментарии: 2



Приостановка всех пользовательских процессов, запрет входа новых пользователей и многое другое

Блог: СУБД Caché
Недавно возникла интересная задача: 21847083.

Итак, необходимо перезапустить СУБД.
Для запуска команды из самой СУБД можно воспользоваться функцией $zf(-100) - новым, безопасным аналогом функций $zf(-1)/$zf(-2), например:

cmd "ccontrol"
args(1) = "stopstart"
args(2) = $p($zu(86),"*",2) ; имя экземпляра
args(3) = "quietly"
d $ZF(-100,"/ASYNC",cmd,.args)

Но при ближайшем рассмотрении топика обнаружилось, что..
автор: servit добавлено: 02 апр 19 просмотры: 4165, комментарии: 0



USE HINT и ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS

В этой публикации мне бы хотелось вернуться к подсказкам USE HINT, представленным впервые в SQL Server 2016 SP1. Часть из них мы уже рассмотрели в предыдущих статьях, в этой статье мы рассмотрим очередную подсказку – ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS, которая влияет на алгоритм оценки числа строк в соединениях.

В статье мы немного поговорим о теории оценки соединений и рассмотрим пример использования хинта. Далее, при помощи недокументированных флагов трассировки и несложной арифметики, мы посмотрим, чем отличается оценка в случае использования и не использования хинта, а также проверим вычисления на конкретном примере.

Далее...
автор: SomewhereSomehow добавлено: 30 мар 19 просмотры: 2382, комментарии: 0



SQL Server 2019: Действительный план запроса

При анализе проблем производительности запроса план запроса часто является ключевым элементом. Планы запросов бывают оценочными и действительными, получать и те и другие можно разными способами.

В данной заметке мы рассмотрим способы получения планов запросов, а также новую возможность SQL Server 2019 CTP 2.4 – получить последний действительный план.

Далее...
автор: SomewhereSomehow добавлено: 29 мар 19 просмотры: 2519, комментарии: 0



SERIALIZABLE режим

Блог: Oracle SQL
Чалышев Максим Михайлович

Моя книга, электронная версия бесплатно
Oracle SQL. 100 шагов от новичка до профессионала. 20 дней новых знаний и практики или платная печатная версия

SQL. 5 дней которые изменят вашу жизнь.

В СУБД ORACLE есть возможность, чтобы пользователь всегда видел только те данные в таблицах, которые были доступны с начала его сессии
Такой режим (уровень изоляции) называется SERIALIZABLE. Для того чтобы включить этот режим используется команда

Alter session set isolation_level=serializable;

Следующий пример показывает отличие режима SERIALIZABLE от стандартного режима эксплуатации СУБД. Уровня изоляции READ COMMITTED
Откроем в двух разных окнах программу SQL Developer (или создадим новый Worksheet) подключимся к схеме SYS как администратор.
создадим таблицу man5
Create table Man5(prt number, name varchar2(50));



INSERT INTO man5 VALUES(20, 'Олег');
INSERT INTO man5 VALUES(21, 'Влад');
INSERT INTO man5 VALUES(22, 'Саша');
Commit;


читать дальше...
автор: Myp3_u_K добавлено: 18 фев 19 просмотры: 3799, комментарии: 0



Контекст сеанса

Блог: Oracle SQL
Чалышев Максим Михайлович
SQL. 5 дней которые изменят твою жизнь.

Введение
В каждой сессии есть возможность использовать специальные структуры данных, именуемые контекст.
Контексты - это набор данных вида - параметр значение. Контекст предоставляет дополнительные возможности для приложений, использующих СУБД Oracle.
Теория и практика
Контекст - это предопределённый набор параметров и значений создаваемый в рамках определенной сессии. Несколько таких наборов параметр значение, объединяется с помощью структуры называемой контекстом.

Задается значение контекста с помощью процедуры DBMS_SESSION.SET_CONTEXT

Функция SYS_CONTEXT позволяет получить значение заданного контекста в раках сессии.
Для создания контекста специальная команда CREATE CONTEXT.
Сначала следует создать специальною процедуру для управления контекстом.

CREATE OR REPLACE PROCEDURE set_mycontext_value ( par IN VARCHAR2, val IN VARCHAR2 ) 
AS BEGIN  DBMS_SESSION.SET_CONTEXT ( 'myctx', par, val ); END;

CREATE OR REPLACE CONTEXT myctx USING set_mycontext_value;

читать дальше...
автор: Myp3_u_K добавлено: 18 фев 19 просмотры: 4061, комментарии: 0



Планировщик JOB заданий. Управление.

Блог: Oracle SQL
Чалышев Максим Михайлович

SQL. 5 дней которые изменят твою жизнь.
моя книга , изучаем Oracle SQL, бесплатно
Oracle SQL. 100 шагов от новичка до профессионала. 20 дней новых знаний и практики или платная печатная версия

Введение
В Oracle есть специальный механизм запланировать выполнение определённой программы, на заданное время, это может быть оператор SQL, программа на языке PLSQL, либо даже внешняя программа. Этот механизм называется механизмом заданий Job

Данный механизм может применяться, например, для планирования запуска тяжелых запросов в ночное время или на выходные дни, распределения задач построения отчетности.

Теория и практика

Для управления заданиями в Oracle существует специальные пакет DBMS_JOB:
Создание заданий
Можно использовать механизм dbms_job
Или механизм dbms_scheduler – более современный способ
DBMS_JOB.SUBMIT(
 JOB OUT BINARY_INTEGER,
 WHAT IN VARCHAR2,
 NEXT_DATE IN DATE DEFAULT SYSDATE,
 INTERVAL IN VARCHAR2 DEFAULT NULL,
 NO_PARSE IN BOOLEAN DEFAULT FALSE,
 INSTANCE IN BINARY_INTEGER DEFAULT any_instance,
 FORCE IN BOOLEAN DEFAULT FALSE
);


Здесь:
JOB – Входной параметр уникальный идентификатор задания. Идентификатор генерируется специальной системной последовательностью.
WHAT - анонимный PL/SQL блок, в данном блоке указывается последовательность команд которая будет выполнена в процессе работы задания.
В же в этом параметре можно также писать команды вставки удаления редактирования (inser update delete), а так же команды для создания создания индексов таблиц, создания индексов, ограничений.
NEXT_DATE – дата время следующего выполнения задания.
Если будет указана дата меньше чем текущую дата, то выполнение задания будет начато немедленно.
INTERVAL – Вычисляемая дата следующего выполнения задания в столбце NEXT_DATE. Примеры интервала задания:
NULL
Задание выполнится однократно и удалится.
читать дальше...
автор: Myp3_u_K добавлено: 18 фев 19 просмотры: 5683, комментарии: 0


предыдущие записи