MySQL检索每个不同ID的最大行数

时间:2013-05-10 05:09:50

标签: mysql sql

这是我的晚会:

我在一张名为notes的表格中写了关于人物的笔记。每个记事都有一个person_id列,用于标识该记事的用户。

我想检索为表格中的每个person_id编写的最后5个注释。

因此,我可以在一个简单的MySQL查询中执行此操作,而不是检索所有笔记并使用PHP来提取每个人的最后五个笔记吗?

提前致谢!

更新

有些人误解了我的问题。我会尝试更好地解释。

假设我的notes表中有20个音符。然后我在people表中有3个人。他们的名字是Jim,Sally和Randle

notes表中,Jim有6个音符,Sally有9个音符,Randle有5个音符。

我想提取所有笔记,但每人限制为5个笔记。因此,在20个音符中,我想提取其中的15个音符。 Jim为5,Sally为5,Randle为5。

下面的PHP和MySQL示例是 我想避免 - 从表中选择所有行。当表达到1,000,000行时,需要处理大量数据:

$notes_array = array();

$notes = $db->query("SELECT person_id, notes FROM notes");
foreach($notes AS $note) {

    // Create an array for this person's notes
    if (!isset($notes_array[$note->person_id]))
        $notes_array[$note->person_id] = array();

    // If this person has 5 notes, we do not need anymore
    if (count($notes_array[$note->person_id]) == 5)
        continue;

    // Add note to an array
    $notes_array[$note->person_id][] = $note->notes;

}

1 个答案:

答案 0 :(得分:3)

select  a.*
from    NOTES a
where 
(
    select  count(*) 
    from    NOTES as b
    where   b.Person_ID = a.Person_ID and b.AutoNumber >= a.AutoNumber
) <= 5

AUTONUMBER更改为自动递增字段或日期时间字段taht可以指示记录的年龄。