SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 24.10.2018 16:50:06

Webing
Участник
Зарегистрирован: 24.10.2018
Сообщений: 5

Группировка уникальных запросов

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

Есть таблица:
table1   (примерно могут быть такие данные).
------------------------------------
--id----ot----komy----date-------
------------------------------------
--1----1-----2-------DATE-------
--2----1----2--------DATE------
--3----2----1-------DATE-------

Я тут навоял чутка:
(select ot from table1 where komy='$uid' order by date) UNION ( select komy from table1 where ot='$uid' order by date)

Задача, выбрать только уникальные ot,komy - решена. НО, дополнительно нужно еще сортировать по date, т.е новые вверху - не решена sad

В итоге я получаю правильные список уникальных ot,komy но не могу отсортировать их по date. Если в select добавляешь еще date, то он соответственно и по дате уникальной ищет, в итоге по 100 раз выводит одинаковый ot.

Подскажите пожалуйста!

Неактивен

 

#2 24.10.2018 16:58:44

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5516

Re: Группировка уникальных запросов

не очень понятно, покажите какой результат вы хотите поучить на этих тестовых данных

Неактивен

 

#3 24.10.2018 17:02:47

Webing
Участник
Зарегистрирован: 24.10.2018
Сообщений: 5

Re: Группировка уникальных запросов

В результате мне нужно что бы вот этот запрос:
(select ot from table1 where komy='$uid') UNION ( select komy from table1 where ot='$uid')

Группировался по дате

Неактивен

 

#4 24.10.2018 17:16:33

Webing
Участник
Зарегистрирован: 24.10.2018
Сообщений: 5

Re: Группировка уникальных запросов

Еще проще, вот таблица выглядит вот так:
https://image.ibb.co/f9EMmV/1.png
в результате запроса - (select ot from table1 where komy='$uid') UNION ( select komy from table1 where ot='$uid')
выводит:
https://image.ibb.co/i6wCtA/2.png

А должен по date, т.е:
142
3
85

Отредактированно Webing (24.10.2018 17:17:56)

Неактивен

 

#5 24.10.2018 17:40:57

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5516

Re: Группировка уникальных запросов

ot = 38 встречается в таблице несколько раз с разными датами
какая из дат должна учитываться при сортировке?

https://sqlinfo.ru/articles/info/18.html

Неактивен

 

#6 25.10.2018 03:53:58

Webing
Участник
Зарегистрирован: 24.10.2018
Сообщений: 5

Re: Группировка уникальных запросов

Должна учитываться последняя дата уникальной записи komy.
В данном примере:       ----------
                                               | Здесь видим, что по дате, самая новая вверху, самая старая внизу.
                                               |  Вот такой результат должен получиться.
ot 38, komy - 142, date - 2018-10-24 15:35:47
ot 38, komy - 3, date - 2018-06-03 18:32:36
ot 38, komy - 85, date - 2018-03-24 16:03:26

Отредактированно Webing (25.10.2018 03:55:04)

Неактивен

 

#7 25.10.2018 10:33:06

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5516

Re: Группировка уникальных запросов

если я правильно понял, то

select ot, max(`mdate`) from (
(select ot, max(`date`) mdate from table1 where komy='$uid' group by ot)
UNION all ( select komy, max(`date`) from table1 where ot='$uid' group by komy)
) t group by 1 order by 2 desc


иначе приведите пример в виде
create table ..
insert into ..
и какой результат должен быть на тестовых данных

Неактивен

 

#8 25.10.2018 12:04:29

Webing
Участник
Зарегистрирован: 24.10.2018
Сообщений: 5

Re: Группировка уникальных запросов

Все отлично работает как нужно!! Спасибо огромное!!

Подскажите, по group by. 1 и 2 это номера запросов? Там же вроде group by ot, а во втором - group by komy.

Неактивен

 

#9 25.10.2018 12:43:58

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5516

Re: Группировка уникальных запросов

1 и 2 это номера полей после select, т.е. группируем по первому - ot, сортируем по второму - max(`mdate`)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson