powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Просьба помочь с запросом
6 сообщений из 6, страница 1 из 1
Просьба помочь с запросом
    #39996254
AlDan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго дня!

Просьба помочь с запросом, если MySQL вообще так может.

Есть таблица (около 2000 записей):

idимядата1дата2id2100Иванов01.10.202001.01.20181010;101Петров09.10.201905.10.20191010;102Иванов10.10.202001.01.20181010;103Иванов01.10.202009.10.20211010;

id - уникальное поле, остальные поля не уникальные, могут быть пустыми и повторяться

Нужно:
- сделать выборку по id2, получится, условно 50 записей
- в рамках выборки нужно отобрать уникальные строки по полю "имя", оставив имя и самые последние значения из дата1 и дата2

Т.е. на выходе получается массив

Запрос выборки по id2:

имядата1дата2id2;Иванов10.10.202009.10.20211010Петров09.10.201905.10.20191010

Первое что хочется понять, так вообще можно?
Или сначала одна выборка, а потом выборка по ней.

Если возможно, буду признателен, если подскажите, в какую сторону копать :)

Заранее спасибо!
...
Рейтинг: 0 / 0
Просьба помочь с запросом
    #39996317
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlDan
и самые последние значения из дата1 и дата2

Прежде чем писАть, стоило бы подумать. А что если "последние" даты - в разных записях?

AlDan
если MySQL вообще так может

Он много чего может... а уж такое - вообще на раз-два:
Код: sql
1.
2.
3.
4.
5.
6.
WITH 
cte AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY id2, name ORDER BY date1 DESC, date2 DESC, id DESC) rn
         FROM test )
SELECT id, name, date1, date2, id2
FROM cte
WHERE rn = 1;


fiddle

PS. Вместо "самые последние значения из дата1 и дата2" используется строгое "запись с наибольшим дата1, если такое значение у нескольких записей - то из них запись с наибольшим дата2, а если и таких записей несколько - запись с наибольшим id".
...
Рейтинг: 0 / 0
Просьба помочь с запросом
    #39996354
AlDan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
большое спасибо, теперь понятно, куда копать.
Касаемо второй даты - согласен, спасибо за замечание.

Чуть подправил скрипт:
fiddle

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

Собственно пытаюсь добавить выборку по конкретному id2
Но где-то в sql делаю ошибку...

Как пример id2 = 1010 и на выходе получается
idnamedate1id2;102Иванов2010-10-201010;101Петров2009-10-201010;

Заранее благодарен
...
Рейтинг: 0 / 0
Просьба помочь с запросом
    #39996357
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlDan
добавить выборку по конкретному id2
Заменить точки с запятой на честные запятые, и приложить FIND_IN_SET().
...
Рейтинг: 0 / 0
Просьба помочь с запросом
    #39996391
paver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlDan

- сделать выборку по id2, получится, условно 50 записей
- в рамках выборки нужно отобрать уникальные строки по полю "имя", оставив имя и самые последние значения из дата1 и дата2

А может вас вообще так устроит?
Код: sql
1.
2.
3.
4.
SELECT name, MAX(date1) mdt1, MAX(date2) mdt2, id2
FROM test
WHERE id2 = 1010
GROUP BY name
...
Рейтинг: 0 / 0
Просьба помочь с запросом
    #39996398
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlDan,

Для начала Ивановых с Петровыми в отдельную таблицу, а сюда их ид.

AlDan
оставив имя и самые последние значения из дата1 и дата2

Что значит так и не понятно. Самый поздний период? Выбрать id с группировкой по имени с максимальным дата2, связать с исходной таблицей по этим id.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Просьба помочь с запросом
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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