Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Запрос, Группировка

Доброе утро! Помогите, пожалуйста разобраться:
Есть три таблицы, и запрос (На ссылке)


Результат такой:
ID_zayavka Data_Zayavka Klient_Zayavka Kyzmetturi_Zayavka FIO_Kyzmetker Status_Zayavka
1 02.11.2015 0:00 3 3 Базарқұлов Жасұлан NULL
1 02.11.2015 0:00 3 3 Керимов Самат NULL
2 31.10.2015 0:00 3 1 Қаламбаев Әкімжан NULL
3 31.10.2015 0:00 2 3 Қалдаров Абзал NULL
3 31.10.2015 0:00 2 3 Қаламбаев Әкімжан NULL
3 31.10.2015 0:00 2 3 Керимов Самат NULL
4 02.11.2015 0:00 1 2 Қалдаров Абзал NULL
4 02.11.2015 0:00 1 2 Керимов Самат NULL


Надо группировать так:
ID_zayavka Data_Zayavka Klient_Zayavka Kyzmetturi_Zayavka FIO_Kyzmetker Status_Zayavka
1 02.11.2015 0:00 3 3 Базарқұлов Жасұлан,
Керимов Самат NULL
2 31.10.2015 0:00 3 1 Қаламбаев Әкімжан NULL
3 31.10.2015 0:00 2 3 Қалдаров Абзал, Қаламбаев Әкімжан, Керимов Самат NULL
4 02.11.2015 0:00 1 2 Қалдаров Абзал, Керимов Самат NULL


Помогите пожалуйста, не смог разобраться

К сообщению приложен файл. Размер - 29Kb
Ответ:
Zhassulan
там была только одна таблица, две колонки. А здесь три таблицы

Свяжи

Zhassulan
и группировка

Там тоже группировка

Zhassulan
Не смог объединить группировку с запросом

Вместо
FROM [таблица]

напиши
FROM (текст запроса) AS [таблица]

Временно можешь из запроса сделать вьюв.
Вопрос: Вложенный запрос, группировка

Здравствуйте, делаю группировку результатов запроса, находя для каждого Госномера последнюю (максимальную) дату

SELECT DISTINCT ТО.Госномер, Max(ТО.Дата) AS [Max-Дата]
FROM ТО
GROUP BY ТО.Госномер;


Затем в редакторе пробую построить запрос, который бы отбирал те госномера, пробег у которых сверх 1000км после ТО.

SELECT  Путёвка.Госномер, Путёвка.Расстояние_км, Путёвка.Дата, Запрос2.[Max-Дата]
FROM Путёвка, Запрос2
WHERE (((Путёвка.Госномер)=[Запрос2].[Госномер]) AND ((Путёвка.Дата>=Запрос2.[Max-Дата] )));


Мой запрос выводит записи только одного госномера, на дату ТО первого госномера.
Ответ: Кхм, я закрывал-открывал все вкладки таблиц/запросов, я закрывал-открывал access. И всё равно результат был неверен, но стоило мне его закрыть и открыть через 30 минут после публикации первого сообщения, всё заработало. Ну, спасибо за внимание.
Вопрос: Запрос, Группировка, Суммирование

Добрый день всем!!!
У меня такая задача, не могу разбираться, помогите пожалуйста:

есть Table1, баллы студентов по категориями вопросов:
ID, Stud_ID, Category, Ball
1__1__1__2
2__1__1__1
3__1__1__3
4__1__1__2
5__1__2__4
6__1__2__1
7__1__3__0
8__1__3__2
9__1__3__1
10_2__1__0
11_2__1__2
12_2__2__1
13_2__2__0
14_2__3__2
15_2__3__2

надо группировать результаты каждого студента по категориям:

Stud_ID, Cat1ball, Cat2ball, Cat3ball
1________8_______5________3
2________2_______1________4

как составить запрос, помогите пожалуйста!!!
Ответ: Zhassulan,

Читать про PIVOT. И если кол-во категорий может менять , то ещё и D-SQL
Вопрос: SQL запрос группировка и сортировка

Что-то не получается у меня сочинить SQL-запрос. В общем, есть такая примерно таблица: (там полей больше, но показал только те, которые существенны для задачи)
Требуется вывести для каждого user_id profession, соответствующее наиболее ранней date_to. Заранее благодарю за помощь

Добавлено спустя 7 минут 47 секунд:
Моя первая удачная попытка такая:
Код:
select user_idprofession from CV_education e1 where date_to=(select min(date_tofrom CV_education e2 where e2.user_id=e1.user_id


Работает, но мне не нравится - кажется, потенциально будет очень медленно работать для большого количества записей
Ответ: если там не хайлоад какой, то наверное полюбас хорошо то, что уже работает.
Вопрос: Нужна помощь с запросом. Группировка с секционированием.

Доброго дня,
Нужна помощь в составлении запроса.
Есть таблица:
CREATE TABLE [dbo].[Test] (
[Id] int IDENTITY(1, 1) NOT NULL,
[LineId] int NOT NULL,
[CategoryId] int NOT NULL)
ON [PRIMARY]

IdLineIdCategoryId
113
213
325
425
6118
10111


В поле LineId могут быть только два значения: 1 или 2.
Значения CategoryId - произвольные.

Нужно вывести информацию по последней категории в каждой линии: LineId, CategoryId, Quantity(количество записей с этой категорией). Последними являются записи с бОльшими Id.
Итог выполнения должен быть такой:

LineId CategoryId Quantity
1111
252
Ответ:
Сергей Шелест
iap,

Огромное спасибо. Пойду осмысливать. :)
Заодно тщательно проверьте на других возможных данных.
А то мало ли что...
Вопрос: Запрос. Группировка с нумерацией

Исходная таблица
NAMEDATE
Смирнов2017-11-01
Иванов2017-11-01
Кузнецов2017-11-01
Соколов2017-11-05
Попов2017-11-05
Лебедев2017-11-06
Козлов2017-11-06
Новиков2017-11-06
Морозов2017-11-09
Петров2017-11-09
Волков2017-11-09
Соловьёв2017-11-09
Васильев2017-11-15
Зайцев2017-11-15
Павлов2017-11-15

+ CREATE TABLE
CREATE TABLE "DOC" (
NAME TEXT, 
DATE DATE
);

INSERT INTO "DOC" (NAME, DATE) VALUES("Смирнов", "2017-11-01");
INSERT INTO "DOC" (NAME, DATE) VALUES("Иванов", "2017-11-01");
INSERT INTO "DOC" (NAME, DATE) VALUES("Кузнецов", "2017-11-01");
INSERT INTO "DOC" (NAME, DATE) VALUES("Соколов", "2017-11-05");
INSERT INTO "DOC" (NAME, DATE) VALUES("Попов", "2017-11-05");
INSERT INTO "DOC" (NAME, DATE) VALUES("Лебедев", "2017-11-06");
INSERT INTO "DOC" (NAME, DATE) VALUES("Козлов", "2017-11-06");
INSERT INTO "DOC" (NAME, DATE) VALUES("Новиков", "2017-11-06");
INSERT INTO "DOC" (NAME, DATE) VALUES("Морозов", "2017-11-09");
INSERT INTO "DOC" (NAME, DATE) VALUES("Петров", "2017-11-09");
INSERT INTO "DOC" (NAME, DATE) VALUES("Волков", "2017-11-09");
INSERT INTO "DOC" (NAME, DATE) VALUES("Соловьёв", "2017-11-09");
INSERT INTO "DOC" (NAME, DATE) VALUES("Васильев", "2017-11-15");
INSERT INTO "DOC" (NAME, DATE) VALUES("Зайцев", "2017-11-15");
INSERT INTO "DOC" (NAME, DATE) VALUES("Павлов", "2017-11-15")

Нужно получить таблицу с группированными и пронумерованными записями:
№ п/п Дата Кол-во
1 2017-11-01 3
2 2017-11-05 2
3 2017-11-06 3
4 2017-11-09 4
5 2017-11-15 3

Помогите сделать запрос. Сложность в нумерации:
SELECT "?" AS "№ п/п", 
"DATE" as "Дата", 
COUNT(*) AS "Кол-во"
FROM "DOC" AS B GROUP BY "DATE";
Ответ: Ясно. Нет, я не использую TDBGrid. Сразу в нужный формат (Excel, html, csv и т.п.)
И не слышал, что у TDBGrid есть такая фича. TDataSet может (DataSet.RecNo в OnCalcField)
Вопрос: Сделать группировку по первым четырем знакам значения поля таблицы

Поле ААА содержит значения:
123412121212
123445454545
123464646464
123497979797
...
В запросе группировка типа GROUP BY AAA группирует по значению поля таблицы.
Как сделать группировку по первым 4-ем знакам значения поля таблицы? В моем случае это 1234?
Спасибо
Ответ: Не спорю
Вопрос: Получение агрегированных данных с группировкой по какому-либо признаку из одной таблицы

Собственно вопрос в заголовке. Я не понимаю как запихнуть в такой запрос группировку.
PS: База сугубо учебная для тренировок
Ответ: Премного благодарен
Вопрос: Как в запросе с группировкой получить значение без использования групповых операций по одному из полей?

Приветствую.

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

Есть исходная таблица. Столбцы: товар, вид операции (покупка или продажа), количество единиц в партии, магазин. В этой таблице разные магазины продают одни и те же товары (например книга, булка, телевизор), но по разным ценам и в разных количествах. Цель создать запрос, который находит минимальную цену продажи для каждого товара из исходной таблицы, указывает магазин, который продаёт по этой минимальной цене и количество товаров в партии.

Казалось бы всё просто. Я создал запрос с группировкой по товару, вид операции "продажа", min по цене. Всё хорошо, я получаю результат. Для каждого товара найдена минимальная цена продажи. Но вот проблема, а как же теперь к найденной строке прицепить какой магазин и в каком количестве продаёт? При добавлении таких полей в запрос с группировкой, требуется указать групповую операцию, а мне нужно отобразить исходное значение магазина и количество в продаваемой партии для найденной цены. Ни одно из условий группировки не подходит для этой задачи, возможно кроме выражения, но поиски какое же выражение использовать для моей цели, так же не привели к успеху.

Возможно эту задачу можно решить запросом без группировки? Буду благодарен любым подсказкам.
Ответ:
Сообщение от Allexxandr
запрос MaxBuyNeed ничего не выдаёт, так как не находит соответствий.
Сделайте запрос на создание таблицы, связанной со всеми остальными как в MaxBuyNeed. Для максимальной представительности надо новую таблицу "перемешать" случайным образом, чтобы равномерно представить все возможные сочетания. Я предположил, что для этой цели подойдет счетчик, поле Код, но не исключено, что есть лучшие варианты. Эту таблицу перешлите.
SQL
1
2
3
4
5
6
SELECT top 3000 Orders.* INTO OrdersSample
FROM mapRegions INNER JOIN (staStations INNER JOIN (invTypes INNER JOIN Orders 
ON invTypes.typeID = Orders.type) 
ON staStations.stationID = Orders.stationID) 
ON mapRegions.regionID = staStations.regionID
ORDER BY rnd(Код)
Если Вы также удаляли информацию из справочников, то запрос на создание надо делать с усеченными справочниками
Вопрос: Сортировка с одновременной группировкой

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

Есть таблица, скажем статистика посещений сайта - date, uri, ip, agent.

Обычное дело - нужно просмотреть статистику посещений за конкретную дату, отсортировав дату от новой к старой:
($all_exp - переменная PHP, список всех проверок, неважно каких, они работают как надо)

Код MySQL
1
SELECT * FROM table WHERE $all_exp ORDER BY date DESC
Все работает.

Но записи за один день не входят в экран, а с некоторых ip - по несколько записей (скажем боты, по 100 страниц в час). Хочется сократить этот список до минимума, и возникает проблема - как создать единый запрос, который сократит таблицу до уникальных ip за этот день? Таблица нужна полная, а не выборка по одному полю.

Я могу сделать это средствами PHP, но хочется изучить тонкости MySQL по составлению сложных запросов и получению правильных данных за один запрос.

Почитал здесь несколько ответов по схожей проблеме, но их решение не подошло - в большинстве примеров как раз заметна неверная сортировка.

Смотрел в сторону GROUP BY + ORDER BY - почитал как пинают здесь тех, кто пытается одновременно их использовать, хотя по логике это должно работать как раз так, как требуется - сначала сортировка по дате, потом группиповка по ip (и желательно с подсчетом страниц каждого ip за день). И оно работает. Но только с небольшим нюансом, который я никак не могу побороть - GROUP BY упорно выдает данные по первому вхождению ip в таблицу, а не по последнему (то есть я получаю первое посещение ip за день, а не последнее). ASC и DESC в GROUP BY почему-то не помогают, хотя и предусмотрены языком.

Код MySQL
1
SELECT * FROM table WHERE $all_exp GROUP BY ip ORDER BY date DESC
Пытался создавать более сложный запрос - сначала сделать выборку со всеми проверками и сортировкой по дате, а затем группировку по ip - не помогло, сортировка по дате вообще в этом случае теряется, а ip он берет упорно первое вхождение за день, а не последнее.

Код MySQL
1
2
3
SELECT * FROM 
(SELECT * FROM table WHERE $all_exp ORDER BY date DESC) t 
GROUP BY ip 
Вводить дополнительные поле id (чтобы искать по максимальному его значению) смысла пока не вижу, хочется минимальными средствами, если это возможно. Плюс таблицу на PHP выводит автоматика по for each перебором всех полей - лишние поля будут мешать визуально, нужна максимально чистая таблица средствами MySQL.

Есть идеи, как это побороть или куда мне пойти?
Ответ:
Сообщение от retvizan
Есть несколько способов решения проблемы, 5 вариантов описаны в этой статье.
К сожалению с точки зрения производительности описаные там варианты плохо подходят к моей задаче, но они действительно более точные, спасибо за наводку.

Сообщение от retvizan
проверьте правильно ли выбираются остальные поля кроме даты
и если правильно, то это не более чем случайность
Дело в том, что единственным требованием к группировке в данной таблице является наличие уникального ip и правильное распределение по времени последнего запроса. Остальные поля в данном случае не так важны (user-agent чаще всего не меняется, а если меняется, то тем более неважен, uri для группировки неважен, refer тоже - они отображаются как второстепенная информация, помогающая выделять ботов по вторичным признакам, дополнительно считается COUNT(ip)), хотя вы разумеется правы - для остальных полей выборка выдает первое вхождение, совпадающее с группируемым полем в таблице. Далее, если требуется подробная статистика для конкретного ip - раскрывается выборка по нему уже в нормальном, негруппированном виде, там естесственно данные будут расположены "как есть", с правильной выборкой по всем полям и сортировкой по дате.

Таким образом приведенный мною выше простенький алгоритм вполне подходит для решения, но все равно спасибо за уточнение по поводу группировок и выдачи данных по ним - постараюсь запомнить на будущее проблемы, связанные с группировкой.

P.S. А кто мне подскажет - почему скрипт форума позволяет растянуть поле редактирования ответа (вероятно textarea vB_Editor_QR_textarea) по горизонтали за пределы серой формы (видимо div vB_Editor_QR)? Как-то странно выглядит на специализированном форуме такой косяк.