@semechki
Я не фрилансер, просто пишу код для себя.

Как мне выбрать только последний статус пользователей?

Допустим, у меня есть таблица пользователей:
name - status
  1. Вася - не женат
  2. Петя - женат

И когда Вася поженится в таблицу добавляется, а не заменяется значение по типу Вася - женат.
На выходе получается таблица:
name - status
  1. Вася - не женат
  2. Петя - женат
  3. Вася - женат

И мне нужно чтобы таблица сохранила предыдущие сведения о Васи, но выводила только где он женат.
При этом до его брака выводилось что он не женат.
То есть, нельзя сделать выборку только где status = женат.
  • Вопрос задан
  • 168 просмотров
Решения вопроса 1
rozhnev
@rozhnev Куратор тега MySQL
Fullstack programmer, DBA, медленно, дорого
В MySQL 8.0 и выше Вы можете использовать оконные функции:
CREATE TABLE users (
    id int primary key auto_increment,
    name varchar(64),
    status enum('single', 'married', 'divorced')
);

INSERT INTO users (name, status) VALUES
('Peter', 'single'),
('Basil', 'single'),
('Peter', 'married'),
('Basil', 'married'),
('Basil', 'divorced');

SELECT * FROM (
    SELECT 
	name,
	status,
	ROW_NUMBER() OVER (PARTITION BY name ORDER BY id DESC) rn
    FROM users) user_status 
WHERE rn = 1;


Здесь прверить SQL запрос
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы