Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MSFT SQL Server - подскажите, как правильно составить запрос

Ответить
Настройки темы
MSFT SQL Server - подскажите, как правильно составить запрос

Аватара для vanoman

Ветеран


Сообщения: 549
Благодарности: 0

Профиль | Отправить PM | Цитировать


не подскажите, почему если я соединяю (inner join)
у меня получаются лишние строки.
вот 2 файла
http://rgho.st/8Hqr8sQSG в этом файле 11700 строк
а в этом
http://rgho.st/6X7VbLmjZ 700 000

соединяю по ключам
"ClientID","EmailMessageId
по идеи должно быть 11700 строк, а у меня 88000. Как такое возможно? откуда дубляж
Дело в том, что эти 11700 из тех кто купил услугу. Там вообще нужно создать столбец и заполнить его единицами. Я это сделаю
Как написать запрос, чтобы
выходе была таблица где
1. первые 11700 строк это с откликом, т.е. чтобы сначала шли строки с единицами
потом те что совпали по ClientID, но без единицы, а потом уже те что не совпали
просто потом уже аналитики будут анализировать.

Отправлено: 19:23, 16-02-2017

 

Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


1. Какой именно запрос Вы делаете? INNER JOIN еще ни о чем не говорит.
2. Не могу пройти по ссылкам. Можете схематично набросать таблицы?!
3. См. пункты 1, 2.

Отправлено: 20:17, 16-02-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата vanoman:
почему если я соединяю (inner join) »
Где Ваш запрос?

Цитата vanoman:
вот 2 файла »
Где схема данных?

Цитата vanoman:
в этом файле 11700 строк »
11386 без заголовка.

Цитата vanoman:
соединяю по ключам
"ClientID","EmailMessageId »
Вот потому хотелось бы увидеть схему, дабы быть уверенным, что это действительно а) ключи и б) понять, какие именно.

Цитата vanoman:
по идеи должно быть 11700 строк, а у меня 88000. Как такое возможно? откуда дубляж »
Нужно видеть схему данных и сам запрос.

Отправлено: 20:42, 16-02-2017 | #3


Аватара для vanoman

Ветеран


Сообщения: 549
Благодарности: 0

Профиль | Отправить PM | Цитировать


Запроса у меня нет, его надо написать в сиквеле, я в другой программе пробЫвал, в R. Вы наврядли её знаете. Но подумал в sql лучше будет. Вот и попросил помочь.
Ребят не знаю как показать структуру
вот скрин тут 2 таблицы

в таблице set 1-2 это данные из set 1-1 которые откликнулись на рекламу, я единицы проставил.
Нужно
Сджойнить эти 2 таблицы но, чтобы сначала шли эти 11700 наблюдений из set 1-2
затем все остальное
Но тут клиент id ввиде хеша. Посути это ФИо Иванов И.И.
Например
Иванов И.И. 17.02.2017 не откликнулся на е-меил "А" рассылку 0
Иванов И.И. 18.02.2017 откликнулся на е-меил "А" рассылку 1
вот отсюда то и дубли пошли. Там где score не единица заполняем по нулям.
Т.е. в итоговой таблице должно быть около 11700 наблюдений с единицами, и остальные по нулям.
690165 нулей.


Если невнятно объяснил, говорите, перефразируюсь

Последний раз редактировалось vanoman, 21-03-2017 в 21:12.


Отправлено: 18:00, 17-02-2017 | #4


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


vanoman, понимаете, в чём дело… Вы пишете, что:
Цитата vanoman:
соединяю по ключам
"ClientID","EmailMessageId »
но в таблице Set 1-1.csv ни 1) поле ClientID, ни 2) поле EmailMessageId, ни 3) комбинация этих полей не может выступать в качестве первичного ключа, поскольку во всех трёх случаях наличествует дублирование значений в этих полях (или их комбинации):
Код: Выделить весь код
SELECT [Set 1-1].ClientID, Count([Set 1-1].ClientID) AS [Count-ClientID]
FROM [Set 1-1]
GROUP BY [Set 1-1].ClientID
HAVING (((Count([Set 1-1].ClientID))>1))
ORDER BY Count([Set 1-1].ClientID) DESC;
Скрытый текст

Код: Выделить весь код
SELECT [Set 1-1].EmailMessageId, Count([Set 1-1].EmailMessageId) AS [Count-EmailMessageId]
FROM [Set 1-1]
GROUP BY [Set 1-1].EmailMessageId
HAVING (((Count([Set 1-1].EmailMessageId))>1))
ORDER BY Count([Set 1-1].EmailMessageId) DESC;
Скрытый текст

Код: Выделить весь код
SELECT [EmailMessageId] & [ClientID] AS Выражение1, Count([EmailMessageId] & [ClientID]) AS Выражение2
FROM [Set 1-1]
GROUP BY [EmailMessageId] & [ClientID]
HAVING (((Count([EmailMessageId] & [ClientID]))>1))
ORDER BY Count([EmailMessageId] & [ClientID]) DESC;
Скрытый текст

Посему при попытках связывания у Вас идёт умножение сущностей.

Цитата vanoman:
Ребят не знаю как показать структуру »
схема базы данных: в Яндекс.Картинках

Цитата vanoman:
в таблице set 1-2 это данные из set 1-1 которые откликнулись на рекламу, я единицы проставил. »
В выложенной Set 1-2 - Copy.csv нет поля Score и единиц.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:51, 17-02-2017 | #5


Аватара для vanoman

Ветеран


Сообщения: 549
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: xlsx Книга1.xlsx
(9.9 Kb, 1 просмотров)

Iska, Вы супер
да score нет, я просто сразу не проставил.
вот теперь есть.
http://rgho.st/92wts9QvM
Тогда подскажите, как решить задачу. Я правда извиняюсь что не могу это технически объяснить со структурой базы данных. Но ясность уже есть
1.В файле set 1_1 все наблюдения
2.в файле set 1_2 только которые отклинулись на рекламную компанию, я сделал столбец score
3. Тогда нужно
Например.
вот уникальный ID из set 1_1
Код: Выделить весь код
ClientID	EmailMessageId	iDateDiff
86139F31664463A8B7592B6887B731A9FC2C3489BB1756A5BF334CFDEA4EF604	9EDCC1391C208BA0	-3
86139F31664463A8B7592B6887B731A9FC2C3489BB1756A5BF334CFDEA4EF604	9EDCC1391C208BA0	-3
86139F31664463A8B7592B6887B731A9FC2C3489BB1756A5BF334CFDEA4EF604	9EDCC1391C208BA0	-1
86139F31664463A8B7592B6887B731A9FC2C3489BB1756A5BF334CFDEA4EF604	9EDCC1391C208BA0	-1
86139F31664463A8B7592B6887B731A9FC2C3489BB1756A5BF334CFDEA4EF604	9EDCC1391C208BA0	-1
86139F31664463A8B7592B6887B731A9FC2C3489BB1756A5BF334CFDEA4EF604	9EDCC1391C208BA0	-2
86139F31664463A8B7592B6887B731A9FC2C3489BB1756A5BF334CFDEA4EF604	9EDCC1391C208BA0	-2
86139F31664463A8B7592B6887B731A9FC2C3489BB1756A5BF334CFDEA4EF604	9EDCC1391C208BA0	-2
86139F31664463A8B7592B6887B731A9FC2C3489BB1756A5BF334CFDEA4EF604	9EDCC1391C208BA0	-202
86139F31664463A8B7592B6887B731A9FC2C3489BB1756A5BF334CFDEA4EF604	9EDCC1391C208BA0	-3
86139F31664463A8B7592B6887B731A9FC2C3489BB1756A5BF334CFDEA4EF604	9EDCC1391C208BA0	-392
86139F31664463A8B7592B6887B731A9FC2C3489BB1756A5BF334CFDEA4EF604	9EDCC1391C208BA0	-390
86139F31664463A8B7592B6887B731A9FC2C3489BB1756A5BF334CFDEA4EF604	9EDCC1391C208BA0	-327
из set 1_2
Код: Выделить весь код
ClientID	EmailMessageId	CntTrn	iDateDiff	score
86139F31664463A8B7592B6887B731A9FC2C3489BB1756A5BF334CFDEA4EF604	9EDCC1391C208BA0	1	4	1
можно ли эту одну строчку, присобачить к тем, что из set 1_1. Это реально?

Сможете показать?
т.е. на выходе должно быть так

прикрепил эксель

Отправлено: 11:17, 18-02-2017 | #6


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата vanoman:
Например.
вот уникальный ID из set 1_1 »
Не хотелось бы Вас разочаровывать, но и комбинация полей ClientID, EmailMessageId и iDateDiff не является уникальной в пределах таблицы:
Код: Выделить весь код
SELECT [ClientID] & [EmailMessageId] & [iDateDiff] AS Выражение1, Count([ClientID] & [EmailMessageId] & [iDateDiff]) AS Выражение2
FROM [Set 1-1]
GROUP BY [ClientID] & [EmailMessageId] & [iDateDiff]
HAVING (((Count([ClientID] & [EmailMessageId] & [iDateDiff]))>1))
ORDER BY Count([ClientID] & [EmailMessageId] & [iDateDiff]) DESC;
Скрытый текст

Я не понимаю, как тут можно связывать.

В общем, мне достаточно тяжело представить, что есть что, без подобной:
Скрытый текст
схемы базы данных.
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:44, 19-02-2017 | #7


Аватара для vanoman

Ветеран


Сообщения: 549
Благодарности: 0

Профиль | Отправить PM | Цитировать


На другом форуме нашел решение
Но с ключами, нужно играть. Вы тут правы, т.к. полного совпадения ожидать не приходится, ключи нужно менять, клиентИД+productgroupname и так далее.

Код: Выделить весь код
select clientid,emailmessageid,productgroupName,mainproductgroupname,null cnttrn,idatediff,null score from set1  
union all select clientid,emailmessageid,null productgroupname,null mainproductgroupname,cnttrn,idatediff,score from set2

Отправлено: 10:08, 21-02-2017 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MSFT SQL Server - подскажите, как правильно составить запрос

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
MSFT SQL Server - подскажите, как корректно составить запросы в sql kontox Программирование и базы данных 1 17-09-2013 15:30
CMD/BAT - помогите правильно составить bat файл с командой xcopy treevalera Скриптовые языки администрирования Windows 9 25-07-2013 19:25
MySQL - Подскажите, как составить специфический запрос в mysql kontox Программирование и базы данных 1 30-04-2013 09:45
Помогите составить запрос Yuriy1990 Вебмастеру 1 20-09-2011 19:51
[решено] Как правильно создать POST запрос K.A.V. Вебмастеру 4 24-01-2010 17:01




 
Переход