Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / интересная задача на select на подумать / 12 сообщений из 12, страница 1 из 1
07.11.2018, 22:14
    #39729599
Michail A.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
интересная задача на select на подумать
Всем добрый день!

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

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

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

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

Существует правило - компания, считается сменившей ИНН, если не менее чем у 90% сотрудников в компании в следующем месяце сменится ИНН, при этом по прежнему ИНН в следующем отчетном периоде не будет ни одного сотрудника.
...
Рейтинг: 0 / 0
07.11.2018, 22:48
    #39729614
PizzaPizza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
интересная задача на select на подумать
Michail A.Существует правило - компания, считается сменившей ИНН, если не менее чем у 90% сотрудников в компании в следующем месяце сменится ИНН , при этом по прежнему ИНН в следующем отчетном периоде не будет ни одного сотрудника .

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

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

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

client_idinnreport_date11111AA22201.01.201821111AA22201.01.201831111AA22201.01.201813333AA44401.12.201723333AA44401.12.201733333AA44401.12.2017
...
Рейтинг: 0 / 0
07.11.2018, 22:58
    #39729626
Michail A.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
интересная задача на select на подумать
PizzaPizza, все именно так Вы поняли.

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

И как раз произведя сверку на две даты, понять какие организации сменили свой ИНН, исходя из сотрудников, которые работают в данных организациях на эти даты.
...
Рейтинг: 0 / 0
07.11.2018, 23:47
    #39729647
PizzaPizza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
интересная задача на select на подумать
Michail A.PizzaPizza, все именно так Вы поняли.

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

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

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

А вообще я б начал с архитектуры. Ключём сущности не стоит выбирать атрибут, который может меняться у сущности.
...
Рейтинг: 0 / 0
08.11.2018, 04:16
    #39729687
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
интересная задача на select на подумать
Michail A.,

постановка задачи у вас хромает на обе ноги.
Выполните " Рекомендации по оформлению сообщений в форуме, Пункт 6 ", чтобы всем понятнее было: что у вас есть, что нужно получить и на каких условиях...
...
Рейтинг: 0 / 0
08.11.2018, 09:14
    #39729754
Guf
Guf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
интересная задача на select на подумать
PizzaPizza, Очень похоже на тестовое или учебное задание...

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

Michail A., Если мыслей нет совсем,
то как-то так...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
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. не проверял, это только идея
...
Рейтинг: 0 / 0
08.11.2018, 13:48
    #39729905
Alozar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
интересная задача на select на подумать
Дайте угадаю. Эту задачку дали для собеседования в сбере? Очень знакомый текст.
...
Рейтинг: 0 / 0
08.11.2018, 14:22
    #39729932
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
интересная задача на select на подумать
Michail A.,
Существует правило - компания, считается сменившей ИНН, если не менее чем у 90% сотрудников в компании в следующем месяце сменится ИНН, при этом по прежнему ИНН в следующем отчетном периоде не будет ни одного сотрудника.

Требование 90% является избыточным, т.к. оно поглощается требованием 100% смены ИНН..
...
Рейтинг: 0 / 0
08.11.2018, 14:25
    #39729933
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
интересная задача на select на подумать
Офтоп:
авторесли не менее чем у 90% сотрудников в компании в следующем месяце сменится ИНН
А у сотрудников ИНН меняется при смене компании? Новый раб, новый номер :)
...
Рейтинг: 0 / 0
11.11.2018, 19:22
    #39731426
DaniilSeryi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
интересная задача на select на подумать
AlozarДайте угадаю. Эту задачку дали для собеседования в сбере? Очень знакомый текст.

В Сбере сейчас другие задачки. Такой дурно сформулированной цензуры я у них не встречал.
Это больше похоже на задачку с sql-ex - именно там обожают такие же совершенно уродские структуры БД.
...
Рейтинг: 0 / 0
12.11.2018, 10:37
    #39731575
iiyama
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
интересная задача на select на подумать
DaniilSeryi,
Не знаю чем вас обидел sql-ex, но там были бы скорее всего пассажиры летающие одной авиакомпанией, ну или корабли воюющие за одну страну и в случае захвата, меняющие названия :)
ПиЭс. Извините за небольшой офтоп, не смог пройти мимо неоднозначной формулировки полезного ресурса
...
Рейтинг: 0 / 0
12.11.2018, 15:49
    #39731829
KRS544
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
интересная задача на select на подумать
Владислав КолосовMichail A.,
Существует правило - компания, считается сменившей ИНН, если не менее чем у 90% сотрудников в компании в следующем месяце сменится ИНН, при этом по прежнему ИНН в следующем отчетном периоде не будет ни одного сотрудника.

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

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


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