Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 интересная задача на select на подумать  [new]
Michail A.
Member

Откуда:
Сообщений: 96
Всем добрый день!

Не соображу как подступиться к задаче.

Есть таблица data c полями report_date (отчетная дата), inn (работодатель), client_id (сотрудник), для упрощения будем считать, что report_date принимает 2 значения - 01.01.2018 и 01.12.2017 .

Нужно вывести работодателей (inn), которые сменили ИНН, т.е. вывести старый и новый inn.

Одна организация может быть поглощена другой. При этом ИНН поглощаемой компании меняется (за один период) на ИНН поглотившей компании. Определить ИНН поглощенных компаний, и компаний, поглотивших их. Т.е. в данной выгрузке нужно найти изменения, которые произошли в январе по сравнению с декабрем.

Существует правило - компания, считается сменившей ИНН, если не менее чем у 90% сотрудников в компании в следующем месяце сменится ИНН, при этом по прежнему ИНН в следующем отчетном периоде не будет ни одного сотрудника.
7 ноя 18, 22:14    [21727459]     Ответить | Цитировать Сообщить модератору
 Re: интересная задача на select на подумать  [new]
PizzaPizza
Member

Откуда:
Сообщений: 365
Michail A.
Существует правило - компания, считается сменившей ИНН, если не менее чем у 90% сотрудников в компании в следующем месяце сменится ИНН, при этом по прежнему ИНН в следующем отчетном периоде не будет ни одного сотрудника.


Никак в голове не укладывается. А где у вас хранится "в следующем месяце"?

Может быть структуру таблицы приведете?

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

client_idinnreport_date
11111AA22201.01.2018
21111AA22201.01.2018
31111AA22201.01.2018
13333AA44401.12.2017
23333AA44401.12.2017
33333AA44401.12.2017
7 ноя 18, 22:48    [21727491]     Ответить | Цитировать Сообщить модератору
 Re: интересная задача на select на подумать  [new]
Michail A.
Member

Откуда:
Сообщений: 96
PizzaPizza, все именно так Вы поняли.

Следующий месяц - это report_date = 01.01.2018.

И как раз произведя сверку на две даты, понять какие организации сменили свой ИНН, исходя из сотрудников, которые работают в данных организациях на эти даты.
7 ноя 18, 22:58    [21727504]     Ответить | Цитировать Сообщить модератору
 Re: интересная задача на select на подумать  [new]
PizzaPizza
Member

Откуда:
Сообщений: 365
Michail A.
PizzaPizza, все именно так Вы поняли.

Следующий месяц - это report_date = 01.01.2018.

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


Получается у вас есть более менее неизменное определение организации в виде списка ее сотрудников. Тогда отсюда я бы и плясал. Определить наборы сотрудников и выбрать уникальные ИНН для каждого набора на каждую дату отчёта и сравнивать Инны.
В случае увольнения или перехода сотрудника из одной организации в другую могут давать сюрпризы.

А вообще я б начал с архитектуры. Ключём сущности не стоит выбирать атрибут, который может меняться у сущности.
7 ноя 18, 23:47    [21727530]     Ответить | Цитировать Сообщить модератору
 Re: интересная задача на select на подумать  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1467
Michail A.,

постановка задачи у вас хромает на обе ноги.
Выполните "Рекомендации по оформлению сообщений в форуме, Пункт 6", чтобы всем понятнее было: что у вас есть, что нужно получить и на каких условиях...
8 ноя 18, 04:16    [21727587]     Ответить | Цитировать Сообщить модератору
 Re: интересная задача на select на подумать  [new]
Guf
Member

Откуда: Новосибирск
Сообщений: 641
PizzaPizza, Очень похоже на тестовое или учебное задание...

Щукина Анна, Да ну, вполне себе внятная постановка перепечатанная с листочка.

Michail A., Если мыслей нет совсем,
+ то как-то так...

WITH [cte]
AS (SELECT  [old].[inn] AS [СтарыйИнн]
          , [new].[inn] AS [НовыйИнн]
          , COUNT([old].[client_id]) AS [КоличествоСотрудниковВСтаройКонторе]
          , COUNT([new].[client_id]) AS [КоличествоСотрудниковВНовойКонторе]
        FROM [Есть таблица] [old]
             LEFT OUTER JOIN [Есть таблица] [new] ON [new].[client_id] = [old].[client_id]
                                                 AND [new].[report_date] = @ВтороеЗначение
                                                 AND [new].[inn] <> [old].[inn]
        WHERE [new].[report_date] = @ПервоеЗначение
          AND /*по прежнему ИНН в следующем отчетном периоде не будет ни одного сотрудника (подсказа: NOT EXISTS)*/
        GROUP BY  [old].[inn]
                , [new].[inn]
   )
SELECT [СтарыйИнн], [НовыйИнн]
    FROM [cte]
    WHERE [КоличествоСотрудниковВНовойКонторе] /*составляет не менее 90% от*/ [КоличествоСотрудниковВСтаройКонторе]

P.S. не проверял, это только идея
8 ноя 18, 09:14    [21727698]     Ответить | Цитировать Сообщить модератору
 Re: интересная задача на select на подумать  [new]
Alozar
Member

Откуда:
Сообщений: 141
Дайте угадаю. Эту задачку дали для собеседования в сбере? Очень знакомый текст.
8 ноя 18, 13:48    [21728101]     Ответить | Цитировать Сообщить модератору
 Re: интересная задача на select на подумать  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7752
Michail A.,
Существует правило - компания, считается сменившей ИНН, если не менее чем у 90% сотрудников в компании в следующем месяце сменится ИНН, при этом по прежнему ИНН в следующем отчетном периоде не будет ни одного сотрудника.


Требование 90% является избыточным, т.к. оно поглощается требованием 100% смены ИНН..
8 ноя 18, 14:22    [21728162]     Ответить | Цитировать Сообщить модератору
 Re: интересная задача на select на подумать  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Офтоп:
автор
если не менее чем у 90% сотрудников в компании в следующем месяце сменится ИНН

А у сотрудников ИНН меняется при смене компании? Новый раб, новый номер :)
8 ноя 18, 14:25    [21728165]     Ответить | Цитировать Сообщить модератору
 Re: интересная задача на select на подумать  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1723
Alozar
Дайте угадаю. Эту задачку дали для собеседования в сбере? Очень знакомый текст.


В Сбере сейчас другие задачки. Такой дурно сформулированной цензуры я у них не встречал.
Это больше похоже на задачку с sql-ex - именно там обожают такие же совершенно уродские структуры БД.
11 ноя 18, 19:22    [21731157]     Ответить | Цитировать Сообщить модератору
 Re: интересная задача на select на подумать  [new]
iiyama
Member

Откуда:
Сообщений: 642
DaniilSeryi,
Не знаю чем вас обидел sql-ex, но там были бы скорее всего пассажиры летающие одной авиакомпанией, ну или корабли воюющие за одну страну и в случае захвата, меняющие названия :)
ПиЭс. Извините за небольшой офтоп, не смог пройти мимо неоднозначной формулировки полезного ресурса
12 ноя 18, 10:37    [21731462]     Ответить | Цитировать Сообщить модератору
 Re: интересная задача на select на подумать  [new]
KRS544
Member

Откуда:
Сообщений: 497
Владислав Колосов
Michail A.,
Существует правило - компания, считается сменившей ИНН, если не менее чем у 90% сотрудников в компании в следующем месяце сменится ИНН, при этом по прежнему ИНН в следующем отчетном периоде не будет ни одного сотрудника.


Требование 90% является избыточным, т.к. оно поглощается требованием 100% смены ИНН..


Вероятно остальных уволили :)
12 ноя 18, 15:49    [21731943]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить