powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос на T-SQL
5 сообщений из 5, страница 1 из 1
Запрос на T-SQL
    #39883947
Fastredialer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
суть вопроса:
нужно вывести текущих абонентов, являющихся абонентами данного оператора более 5 лет

написал скрипт, но логика там такая, что он выводит все смены тарифа, поэтому группирую по оператору, но COUNT после GROUP BY считает все строки, а не так, как сгруппированы

SELECT История_давних.номер, История_давних.ID_оператора--, COUNT(История_давних.ID_оператора)
FROM (
SELECT Давние_подключения.номер, Операторы.ID_оператора
FROM [История тарифов]
INNER JOIN (
SELECT [История тарифов].номер, MAX([История тарифов].дата_подключения) AS дата_подключения
FROM [История тарифов]
WHERE [История тарифов].дата_подключения < DATEADD(year,-5, GETDATE())
GROUP BY [История тарифов].номер
) AS Давние_подключения
ON [История тарифов].номер = Давние_подключения.номер
INNER JOIN Тарифы
ON Тарифы.ID_тарифа = [История тарифов].ID_тарифа
INNER JOIN Операторы
ON Операторы.ID_оператора = Тарифы.ID_оператора
WHERE [История тарифов].дата_подключения BETWEEN Давние_подключения.дата_подключения AND GETDATE()
) AS История_давних
INNER JOIN (
SELECT [Номера абонентов].номер, Операторы.ID_оператора, Операторы.название --
FROM [Номера абонентов]
INNER JOIN Тарифы
ON Тарифы.ID_тарифа = [Номера абонентов].ID_тарифа
INNER JOIN Операторы
ON Операторы.ID_оператора = Тарифы.ID_оператора
) AS Текущий_оператор
ON Текущий_оператор.номер = История_давних.номер

GROUP BY История_давних.номер, История_давних.ID_оператора
...
Рейтинг: 0 / 0
Запрос на T-SQL
    #39884100
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fastredialerсуть вопроса:
нужно вывести текущих абонентов, являющихся абонентами данного оператора более 5 лет

написал скрипт, но логика там такая, что он выводит все смены тарифа, поэтому группирую по оператору, но COUNT после GROUP BY считает все строки, а не так, как сгруппированы

Код: 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.
27.
28.
SELECT История_давних.номер, История_давних.ID_оператора[color=green]--, COUNT(История_давних.ID_оператора)[/color]
FROM (
    SELECT Давние_подключения.номер, Операторы.ID_оператора
    FROM [История тарифов]
    INNER JOIN (
        SELECT [История тарифов].номер, MAX([История тарифов].дата_подключения) AS дата_подключения
        FROM [История тарифов]
        WHERE [История тарифов].дата_подключения < DATEADD(year,-5, GETDATE())
        GROUP BY [История тарифов].номер
    ) AS Давние_подключения
    ON [История тарифов].номер = Давние_подключения.номер
    INNER JOIN Тарифы
    ON Тарифы.ID_тарифа = [История тарифов].ID_тарифа
    INNER JOIN Операторы
    ON Операторы.ID_оператора = Тарифы.ID_оператора
    WHERE [История тарифов].дата_подключения BETWEEN Давние_подключения.дата_подключения AND GETDATE()
) AS История_давних
INNER JOIN (
    SELECT [Номера абонентов].номер, Операторы.ID_оператора, Операторы.название -- 
    FROM [Номера абонентов]
    INNER JOIN Тарифы
    ON Тарифы.ID_тарифа = [Номера абонентов].ID_тарифа
    INNER JOIN Операторы
    ON Операторы.ID_оператора = Тарифы.ID_оператора
) AS Текущий_оператор
ON Текущий_оператор.номер = История_давних.номер

GROUP BY История_давних.номер, История_давних.ID_оператора




В табл.[История тарифов] с ПК какая-то лажа
Только один абонент в день может только подключиться чтоле ?


Fastredialerнужно вывести текущих абонентов, являющихся абонентами данного оператора более 5 летСуммарно, провели "на операторе" более 5-ти лет и сейчас являются его абонентами ?
Или первый раз подключались к этому оператору более 5 лет назад и сейчас являются его абонентами ?
...
Рейтинг: 0 / 0
Запрос на T-SQL
    #39884109
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
courtВ табл.[История тарифов] с ПК какая-то лажа
Только один абонент в день может только подключиться чтоле ?

... эээ, это все 3-и поля ПК, - тогда замечание снимается
...
Рейтинг: 0 / 0
Запрос на T-SQL
    #39884124
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
courtСуммарно, провели "на операторе" более 5-ти лет и сейчас являются его абонентами ?
Или первый раз подключались к этому оператору более 5 лет назад и сейчас являются его абонентами ?
вообщем, с этого можно начать
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select
	a.ID_абонента
	,c.ID_оператора
	,b.дата_подключения
	,lead(b.дата_подключения)over(partition by a.ID_абонента order by b.дата_подключения) as дата_отключения
from [Номера абонентов]		a
inner join [История тарифов]	b on a.ID_абонента = b.ID_абонента
inner join Тарифы		c on b.ID_тарифа = c.ID_тарифа


а затем, в зависимости от ответа на вопрос в квоте, или просуммировать, или exists-ом проверить
...
Рейтинг: 0 / 0
Запрос на T-SQL
    #39884163
Fastredialer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Fastredialer,

все, понял, надо было еще один INNER JOIN сделать
точнее это все засунуть внутрь INNER JOIN
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос на T-SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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