ВНИМАНИЕ! Проблема формата даты
Я настоятельно призываю вас преобразовать столбец CreadedOn
в тип данных DATE
вместо VARCHAR
, чтобы получить соответствующий порядок значений по дате.
В противном случае 14-MAR-2020
будет считаться позже, чем 11-DEC-2020
.
Пример выпуска DB-Fiddle
Схема
CREATE TABLE users (
`ID` INTEGER,
`Previous` VARCHAR(5),
`Current` VARCHAR(6),
`User` VARCHAR(18),
`createdOn` VARCHAR(20)
);
INSERT INTO users
(`ID`, `Previous`, `Current`, `User`, `createdOn`)
VALUES
('1', 'RED', 'BLUE', 'System', '14-MAR-2020'),
('2', 'GREEN', 'YELLOW', 'ADMIN', '12-MAR-2020'),
('3', 'GREEN', 'PURPLE', 'System', '11-DEC-2020'),
('4', 'GREEN', 'YELLOW', 'System', '10-MAR-2020');
Другой ответ на запрос { ссылка }
select
Id,
Previous,
User,
CreatedOn,
(
select Current
from users
order by CreatedOn desc
limit 1
) as Current
from users
where `user` = 'ADMIN'
order by createdon desc
limit 1;
| Id | Previous | User | CreatedOn | Current |
| --- | -------- | ----- | ----------- | ------- |
| 2 | GREEN | ADMIN | 12-MAR-2020 | BLUE |
Ожидаемый ток PURPLE
Чтобы устранить проблему с сортировкой по дате, вам необходимо изменить таблицу с помощью функции STR_TO_DATE()
.
Это Важно отметить, что сравнение с STR_TO_DATE
в вашем запросе вместо обновления столбца приведет к полному сканированию таблицы, сравнивая каждую запись в таблице.
Пример DB-Fiddle
ALTER TABLE users
ADD COLUMN createdOn_Date DATE NULL DEFAULT NULL;
UPDATE users
SET CreatedOn_Date = STR_TO_DATE(CreatedOn, '%d-%b-%Y')
WHERE CreatedOn_Date IS NULL;
ALTER TABLE users
DROP COLUMN CreatedOn,
CHANGE COLUMN CreatedOn_Date CreatedOn DATE;
Затем отобразите свои записи в нужном формате, используйте функцию DATE_FORMAT()
Другой ответ на запрос * 1 060 *{ ссылка }
select
Id,
Previous,
User,
DATE_FORMAT(CreatedOn, '%d-%b-%Y') AS CreatedOn,
(
select Current
from users
order by CreatedOn desc
limit 1
) as Current
from users
where `user` = 'ADMIN'
order by createdon desc
limit 1;
Результат
| Id | Previous | User | CreatedOn | Current |
| --- | -------- | ----- | ----------- | ------- |
| 2 | GREEN | ADMIN | 12-Mar-2020 | PURPLE |