在mysql中选择具有唯一字段值的行
对于表在mysql中选择具有唯一字段值的行,mysql,Mysql,对于表注释,我有以下列: id content add_date uid school_id 行可以具有相同的学校id 我想根据添加日期选择最新数据,但每个学校id只能选择1行(学校id不能重复),限制为10行 我已经尝试了很多代码,但它对我不起作用。 任何帮助都将不胜感激 select C.ID, C.Content, t1.MaxDate as [add_date], C.uid, t1.school_id from (selet school_id, max(add_Date) as '
注释
,我有以下列:
id
content
add_date
uid
school_id
行可以具有相同的学校id
我想根据添加日期选择最新数据,但每个学校id只能选择1行(学校id不能重复),限制为10行
我已经尝试了很多代码,但它对我不起作用。
任何帮助都将不胜感激
select C.ID, C.Content, t1.MaxDate as [add_date], C.uid, t1.school_id
from (selet school_id, max(add_Date) as 'MaxDate'
from comments
group by school_id) T1
inner join comments C on T1.school_id = C.school_id and C.add_Date= T1.MaxDate
LIMIT 10
如果要选择返回的10行
,请添加order by
,或Where
子句这就是我们所称的每组最大N
。您可以通过将其放入子查询来实现这一点,这样它就可以与未分组的表(comments
)连接起来。
试试这个:
SELECT c.*
FROM
(
SELECT school_id, MAX(add_date) maxDate
FROM comments
GROUP BY school_id
) x INNER JOIN comments c
ON x.school_id = c.school_ID AND
x.maxDate = c.add_date
ORDER BY x.maxDate desc
LIMIT 10
在注释(添加日期)和注释(学校id,添加日期)上创建索引为该问题提供的其他解决方案必须扫描整个注释表,并且不会随着表的增长而扩展。此解决方案将读取所需的最小行数。可能希望将ORDER BY maxDate DESC LIMIT 10添加到子查询x。这将导致在聚合后,仅从评论中提取最近的10篇帖子。否则,如果有超过10所学校,则会进行额外的查找。要求的OP根据添加日期选择最新数据
Yes,子查询中的ordering desc将按添加日期查找最近的10所学校。您只需要x的10条最新记录。
select c1.*
from comments c1
where add_date = (select max(add_date) from comments c2 where c2.school_id =c1.school_id)
order by add_date desc
limit 10