выходная строка с наибольшей датой mysql - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть следующая таблица, в которой я хочу получить строку со статусом = 4 и наибольшей датой

TABLE

status  date
  4      2018-11-25
  3      2018-11-24
  4      2018-11-22

Ожидаемый результат

4 2018-11-25

Я пробовал это утверждение, но оно возвращает ошибку

SQL

 SELECT * 
 FROM posts 
  WHERE status=4 AND MAX(date)

Что я делаю не так?

Ответы [ 4 ]

0 голосов
/ 25 ноября 2018

Select status, max(Date) from table where status =4 group by status;

Скорее всего, это будет просто с группой, по которой группируется статус и рассчитывается максимальное число дат в каждой группе, как вы хотели только для статуса 4, где использовалось условиеотфильтровать только для статуса = 4

0 голосов
/ 25 ноября 2018

Используйте GROUP BY для status = 4

 SELECT status, MAX(date) as maxdate 
 FROM posts 
 GROUP BY status
 HAVING status = 4
0 голосов
/ 25 ноября 2018

Вот один из способов сделать это с помощью подзапроса:

SELECT p.*
FROM posts p
WHERE
    status = 4 AND
    date = (SELECT MAX(date) FROM posts WHERE status = 4);

Демо

Если вы используете MySQL 8+ илипозже мы можем воспользоваться аналитическими функциями:

SELECT status, date
FROM
(
    SELECT p.*, ROW_NUMBER() OVER (ORDER BY date DESC) rn
    FROM posts p
    WHERE status = 4
) t
WHERE rn = 1;
0 голосов
/ 25 ноября 2018

Используйте order by и получите самую последнюю строку.В стандартном SQL это будет:

SELECT p.* 
FROM posts p
WHERE p.status = 4 
ORDER BY date DESC
FETCH FIRST 1 ROW ONLY;

FETCH FIRST - это стандартный SQL для этой конструкции.Некоторые базы данных используют SELECT TOP (1) или LIMIT или даже другие методы.MySQL использует LIMIT вместо FETCH FIRST.

Вы не можете использовать функции агрегирования в предложении WHERE.Вы можете использовать их в предложении HAVING после GROUP BY, но эта логика не подходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...