powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / Поиск: Искать ответы на сообщение: #160928  
4 сообщений из 4, страница 1 из 1
SQL / Задачи с собеседования для базоёбов.
    #160928
Просто Трёп
Скрыть профиль Поместить в игнор-лист
Участник
Код: SQL
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.
--table
SELECT i_days.dt, count(1) cnt, sum(calls.duration)/60 d_min
FROM i_days left join calls on calls.dt between i_days.dt and dateadd(day, 1, i_days.dt)
where
  calls.incoming = 1 and calls.ext not like '6%' and calls.cd <> 'TR'
  and  i_days.dt between '2017-05-18T00:00:00.000' and '2022-09-23T00:00:00.000'
group by i_days.dt
order by 1

--cte
;with cte as
(
    SELECT convert(datetime,'2000-01-01T00:00:00.000') as sdt
    UNION ALL
    SELECT dateadd(day, 1, sdt)
    FROM cte
    WHERE sdt < convert(datetime,'2041-01-01T00:00:00.000')
)
SELECT cte.sdt, count(1) cnt, sum(calls.duration)/60 d_min
FROM cte left join calls on calls.dt between cte.sdt and dateadd(day, 1, cte.sdt)
where
  calls.incoming = 1 and calls.ext not like '6%' and calls.cd <> 'TR'
  and  cte.sdt between '2017-05-18T00:00:00.000' and '2022-09-23T00:00:00.000'
group by cte.sdt
order by 1
OPTION(maxrecursion 0)
...
Рейтинг: 0 / 0
SQL / Задачи с собеседования для базоёбов.
    #161078
Дед-Папыхтет
Скрыть профиль Поместить в игнор-лист
Участник
Просто Трёп  23.09.2022, 16:14
[игнорируется]
Код: SQL
1.
i_days
Код: SQL
1.
create unique index ix123 on i_days (dt)
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT i_days.dt, count(1) cnt, sum(calls.duration)/60 d_min
FROM i_days left join calls
  --on calls.dt between i_days.dt and dateadd(day, 1, i_days.dt)
  --on calls.dt >= i_days.dt and calls.dt <= dateadd(day, 1, i_days.dt)
  on calls.dt >= i_days.dt and i_days.dt >= dateadd(day,-1,calls.dt)
where
  calls.incoming = 1 and calls.ext not like '6%' and calls.cd <> 'TR'
  and  i_days.dt between '2017-05-18T00:00:00.000' and '2022-09-23T00:00:00.000'
group by i_days.dt
order by 1
3 условия в ON попробуй с каждым + индекс. Сравни.
...
Рейтинг: 0 / 0
SQL / Задачи с собеседования для базоёбов.
    #163871
Просто Трёп
Скрыть профиль Поместить в игнор-лист
Участник
Дед-Папыхтет  23.09.2022, 18:31
[игнорируется]
Просто Трёп  23.09.2022, 16:14
[игнорируется]
Код: SQL
1.
i_days
Код: SQL
1.
create unique index ix123 on i_days (dt)
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT i_days.dt, count(1) cnt, sum(calls.duration)/60 d_min
FROM i_days left join calls
  --on calls.dt between i_days.dt and dateadd(day, 1, i_days.dt)
  --on calls.dt >= i_days.dt and calls.dt <= dateadd(day, 1, i_days.dt)
  on calls.dt >= i_days.dt and i_days.dt >= dateadd(day,-1,calls.dt)
where
  calls.incoming = 1 and calls.ext not like '6%' and calls.cd <> 'TR'
  and  i_days.dt between '2017-05-18T00:00:00.000' and '2022-09-23T00:00:00.000'
group by i_days.dt
order by 1
3 условия в ON попробуй с каждым + индекс. Сравни.
О, вариант с больше меньше даже быстрее cte. Спасибо.
...
Рейтинг: 0 / 0
SQL / Задачи с собеседования для базоёбов.
    #164142
Дед-Папыхтет
Скрыть профиль Поместить в игнор-лист
Участник
Просто Трёп  26.09.2022, 15:30
[игнорируется]
Дед-Папыхтет  26.09.2022, 15:17
[игнорируется]
Просто Трёп  26.09.2022, 14:27
[игнорируется]
А как сделать, чтобы в выборку попали строки с null? В этом же запросе.
уточни конкретнее - какое поле нул ))))
добавь or field is null
или может нужно часть условия из where перенести в on (left join).
Поля с результатами агрегатных функций. Условие в where я не могу менять, тогда статистика порушится.
Перенести из where в on - жесть, какие тормоза.

Грубо говоря, мне надо, чтобы столбец с днями (первый) был непрерывный.
Дед-Папыхтет  23.09.2022, 18:31
[игнорируется]
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT i_days.dt, count(1) cnt, sum(calls.duration)/60 d_min
FROM i_days left join calls
  --on calls.dt between i_days.dt and dateadd(day, 1, i_days.dt)
  --on calls.dt >= i_days.dt and calls.dt <= dateadd(day, 1, i_days.dt)
  on calls.dt >= i_days.dt and i_days.dt >= dateadd(day,-1,calls.dt)
  and calls.incoming = 1 and calls.ext not like '6%' and calls.cd <> 'TR'
where i_days.dt between '2017-05-18T00:00:00.000' and '2022-09-23T00:00:00.000'
group by i_days.dt
order by 1
так?
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Поиск: Искать ответы на сообщение: #160928  
Пользователи онлайн (24): Анонимы (16), Yandex Bot, Google Bot 1 мин., Дед-Папыхтет 2 мин., Bing Bot 2 мин., Кусь 3 мин., anonymous 4 мин., Гарыныч 8 мин., Biene Maja 9 мин.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
x
x
Закрыть


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