Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mysql中选择具有唯一字段值的行_Mysql - Fatal编程技术网

在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