SQL Запрос, чтобы получить последние записи для этого пользователя - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть база данных MySQL, и мне нужна небольшая помощь с запросом данных из таблицы.

// Table
id              INTEGER,
column1         VARCHAR,
completiondate  DATETIME

// Sample data
(101, 'a', '2020-03-20 12:00:00')
(101, 'b', '2020-03-21 12:00:00')
(101, 'c', '2020-03-22 12:00:00')
(101, 'c', '2020-03-23 12:00:00')
(101, 'd', '2020-03-24 12:00:00')
(102, 'a', '2020-03-20 12:00:00')
(102, 'b', '2020-03-21 12:00:00')

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

Ожидаемый вывод для пользователя 101:

(101, 'a', '2020-03-20 12:00:00')
(101, 'b', '2020-03-21 12:00:00')
(101, 'c', '2020-03-23 12:00:00')
(101, 'd', '2020-03-24 12:00:00')

Я новичок с SQL. Было бы замечательно, если бы кто-нибудь мог дать какое-либо представление об этом.

Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 09 апреля 2020

Вы можете фильтровать с помощью подзапроса:

select t.*
from mytable t
where 
    t.id = 101
    t.completiondate = (
        select max(t1.completiondate) 
        from mytable t1 
        where t1.id = t.id and t1.id = t.id and t1.column1 = t.column1
    )

В качестве альтернативы, в MySQL 8.0, вы можете использовать оконную функцию rank():

select *
from (
     select t.*, rank() over(partition by id, column1 order by completiondate desc) rn
     from mytable t
     where id = 101
) t
where rn = 1

Обратите внимание, что для этого набор данных, вы также можете использовать простое агрегирование:

select id, column1, max(completiondate) completiondate
from mytable
where id = 101
group by id, column1
0 голосов
/ 09 апреля 2020

Я думаю, что самым простым способом было бы присоединить максимальное значение таблиц к текущей таблице как-то так

SELECT user, `date`
FROM yourtable
INNER JOIN 
(
  SELECT MAX(date) AS `date`, user
  FROM yourtable
  GROUP BY user
) latest ON latest.`date`= yourtable.`date` AND latest.user = yourtable.user
0 голосов
/ 09 апреля 2020

Вот один PHP -дружественный способ сделать это, используя соединения:

SELECT t1.*
FROM yourTable t1
INNER JOIN
(
    SELECT id, column1, MAX(completiondate) AS maxcompletiondate
    FROM yourTable
    GROUP BY id, column1
) t2
    ON t1.id = t2.id AND
       t1.column1 = t2.column1 AND
       t1.completiondate = t2.maxcompletiondate;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...