我在下一张表中要检索status = 4和最大日期的行
表
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)
我在做什么错了?
答案 0 :(得分:0)
使用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
子句中使用它们,但是这种逻辑是不合适的。
答案 1 :(得分:0)
将GROUP BY
用于status = 4
SELECT status, MAX(date) as maxdate
FROM posts
GROUP BY status
HAVING status = 4
答案 2 :(得分:0)
这是使用子查询执行此操作的一种方法:
127.45
如果您使用的是MySQL 8+或更高版本,那么我们可以利用分析功能:
SELECT p.*
FROM posts p
WHERE
status = 4 AND
date = (SELECT MAX(date) FROM posts WHERE status = 4);
答案 3 :(得分:0)
Select status, max(Date) from table where status =4 group by status;
这很简单,只需一个组即可对状态进行分组,并根据状态4计算每个组中的最大日期,其中子句仅用于过滤状态= 4