Форум программистов, компьютерный форум, киберфорум
Базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
12 / 12 / 2
Регистрация: 19.03.2012
Сообщений: 175
1

Группировка по полю с добавлением даты

12.01.2019, 15:13. Показов 1749. Ответов 14
Метки sql (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!
Есть таблица такого вида:
call_id start_time party_callerid dnowner
7778 11.01.2019 499 500
7778 11.01.2019 499 507
7779 12.01.2019 499 500
7780 12.01.2019 9290649872 804

id - просто идентификатор
call_id - id вызова
start_time - дата вызова
party_callerid - кто звонит
dnowner - куда попадает
В запросе необходимо получить дату первого звонка для каждого номера. Выглядеть примерно так должно:
call_id start_time party_callerid dnowner
7778 11.01.2019 499 500
7780 12.01.2019 9290649872 804
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.01.2019, 15:13
Ответы с готовыми решениями:

Группировка по полю
Здравствуйте! У меня есть запрос, который повторяет одно и то же значение поля, по сути он делает...

Создать сложный отчет - выборка по одному полю, группировка по другому
Уважаемые гуру ! Я новичок в Аксессе, так что прошу сильно не пинать. Есть таблица с полями...

Выборка записей из таблицы и группировка по полю
Приветствую. Есть таблица комментариев, в которой нас интересуют поля uid, user_id. Так вот, нужно...

Группировка по одному полю, где другое одинаковое
Добрый день господа! Нужно сформировать группировку запроса, из такого: 01:00 | title#1 20:00 |...

14
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,129
Записей в блоге: 3
12.01.2019, 19:14 2
SQL
1
2
3
SELECT MIN(id), start_time, party
FROM 
GROUP BY start_time, party
это будет минимальный звонок
далее этот запрос джойнишь с основной таблицей и получаешь dnowner
1
12 / 12 / 2
Регистрация: 19.03.2012
Сообщений: 175
12.01.2019, 20:51  [ТС] 3
Не совсем понимаю, но пробую разобраться. Вашим запросом убираются лишние call_id, но party_callerid остались. И не понял с какой основной таблицей делать JOIN. У меня всего одна таблица и все в ней
0
411 / 365 / 142
Регистрация: 09.04.2011
Сообщений: 1,051
12.01.2019, 21:32 4
Vyazan, см эту статью
1
12 / 12 / 2
Регистрация: 19.03.2012
Сообщений: 175
12.01.2019, 22:09  [ТС] 5
Создал запрос по аналогии с первым вариантом:
SQL
1
2
3
SELECT t.call_id, t.party_callerid, t.start_time
FROM myphone_callhistory_v14 t JOIN
(SELECT call_id, MIN(start_time) AS mtime FROM myphone_callhistory_v14 GROP BY call_id) AS t1 ON t.call_id = t1.call_id AND t.start_time = t1.mtime
MSAccess, на котором провожу тесты - пишет ошибка в предложении FROM((
0
411 / 365 / 142
Регистрация: 09.04.2011
Сообщений: 1,051
12.01.2019, 22:39 6
возможно в MSAccess ключевое слово AS является обязательным
попробуйте
myphone_callhistory_v14 AS t
вместо
myphone_callhistory_v14 t
1
12 / 12 / 2
Регистрация: 19.03.2012
Сообщений: 175
12.01.2019, 23:08  [ТС] 7
SQL
1
2
3
SELECT t.call_id, t.party_callerid, t.start_time
FROM myphone_callhistory_v14 AS t JOIN
(SELECT call_id, MIN(start_time) AS mtime FROM myphone_callhistory_v14 GROP BY call_id) AS t1 ON t.call_id = t1.call_id AND t.start_time = t1.mtime
Не помогло
0
411 / 365 / 142
Регистрация: 09.04.2011
Сообщений: 1,051
12.01.2019, 23:16 8
не силен в аксесе
уточняйте в https://www.cyberforum.ru/ms-access/ с точным указанием ошибки
1
12 / 12 / 2
Регистрация: 19.03.2012
Сообщений: 175
12.01.2019, 23:35  [ТС] 9
Фиг с ним с accessом, в нем я только тестирую, что бы постоянно не подключаться к реальной базе. В postgre - запрос выполнился, но номера дублируются (поле party_callerid), а нужно только party_callerid с датой (start_time) первого звонка и на какой добавочный номер (dnowner) звонивший попал. call_id бывает одинаковым, когда добавочный номер (dnowner), например, не ответил, то звонок переадресовывается на другой добавочный номер.
0
12 / 12 / 2
Регистрация: 19.03.2012
Сообщений: 175
12.01.2019, 23:39  [ТС] 10
Результат
Миниатюры
Группировка по полю с добавлением даты  
0
411 / 365 / 142
Регистрация: 09.04.2011
Сообщений: 1,051
13.01.2019, 02:00 11
Цитата Сообщение от Vyazan Посмотреть сообщение
нужно только party_callerid с датой (start_time) первого звонка и на какой добавочный номер (dnowner) звонивший попал.
так и группировать нужно по party_callerid

MySQL
1
2
3
4
SELECT t.dnowner, t.party_callerid, t.start_time
FROM myphone_callhistory_v14 AS t JOIN
(SELECT call_id, MIN(start_time) AS mtime FROM myphone_callhistory_v14 GROUP BY party_callerid) AS t1 
ON t.party_callerid = t1.party_callerid AND t.start_time = t1.mtime
0
12 / 12 / 2
Регистрация: 19.03.2012
Сообщений: 175
13.01.2019, 13:11  [ТС] 12
Выдает ошибку Ваш запрос: myphone_callhistory_v14.call_id must appear in the GROUP BY clause or be used in an aggregate function.
Добавил поле call_id в группировку
SQL
1
2
3
4
SELECT t.dnowner, t.party_callerid, t.start_time
FROM myphone_callhistory_v14 AS t JOIN
(SELECT call_id, MIN(start_time) AS mtime FROM myphone_callhistory_v14 GROUP BY party_callerid, call_id) AS t1 
ON t.party_callerid = t1.party_callerid AND t.start_time = t1.mtime
Теперь написал, что t1.party_callerid - не знает такую колонку. Добавил ее:
SQL
1
2
3
4
SELECT t.dnowner, t.party_callerid, t.start_time
FROM myphone_callhistory_v14 AS t JOIN
(SELECT call_id, MIN(start_time) AS mtime, party_callerid FROM myphone_callhistory_v14 GROUP BY party_callerid, call_id) AS t1 
ON t.party_callerid = t1.party_callerid AND t.start_time = t1.mtime
запрос отработал, но неправильно. Вообще вся группировка куда то пропала.
P.S.: Я может не правильно объяснил суть... Есть таблица с журналом вызовов (myphone_callhistory_v14), в нее записываются данные кто звонит (party_callerid), куда звонит (dnowner), дата вызова (start_time). Например, за декабрь 2018 года нам на номер N (dnowner) позвонило 354 новых клиентов с номерами, что хранятся в party_callerid. Я пытаюсь получить выборка вида: номер (party_callerid) такой то первый раз позвонил тогда-то (start_time) и разговаривал с тем то (dnowner), такой то вот тогда то первый раз и тд. Если номер звонил несколько раз, нам нужно только дата первого звонка, остальное не интересует. Надеюсь, так понятнее
Скрин внизу - это то, что на данный момент выходит. Со вторым запросом
Миниатюры
Группировка по полю с добавлением даты  
0
411 / 365 / 142
Регистрация: 09.04.2011
Сообщений: 1,051
13.01.2019, 14:11 13
Лучший ответ Сообщение было отмечено Vyazan как решение

Решение

не везде заменил call_id на party_callerid
попробуйте
MySQL
1
2
3
4
SELECT t.dnowner, t.party_callerid, t.start_time
FROM myphone_callhistory_v14 AS t JOIN
(SELECT party_callerid, MIN(start_time) AS mtime FROM myphone_callhistory_v14 GROUP BY party_callerid) AS t1 
ON t.party_callerid = t1.party_callerid AND t.start_time = t1.mtime
1
12 / 12 / 2
Регистрация: 19.03.2012
Сообщений: 175
13.01.2019, 22:09  [ТС] 14
Огромное спасибо! Вроде работает правильно, надо в понедельник протестить более подробно
0
12 / 12 / 2
Регистрация: 19.03.2012
Сообщений: 175
14.01.2019, 14:43  [ТС] 15
Да, все работает, как часы! Спасибо!
0
14.01.2019, 14:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.01.2019, 14:43
Помогаю со студенческими работами здесь

Выборка совпадений по полю в БД и группировка данных
Есть таблица 'statistics', в таблице есть данные о пользователях 'id', 'sn', 'external_ip'. Нужно...

Не допускается группировка по полю - ресурсу в колонках таблицы
Всем добрый день! Пытаюсь создать вычисляемое поле и беда. :( Вот принт вкладки Вычисляемые...

Контекстное меню: Архивация с добавлением даты в имя файла
Здравствуйте. Изучил тему, но не смог найти решение для своей задачи. Задача: создать в...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru