选择每组的最后一个寄存器

时间:2015-12-15 19:10:41

标签: mysql sql symfony

我需要为每个budget_id选择最后一个寄存器,这是一个外键。

例如,如果我的表是:

id | budget_id | comment
1  | 8 | Test 1
2  | 8 | Test 2
3  | 5 | Test 1
4  | 5 | Test 2

我需要像这样检索:

id | budget_id | comment
4  | 5 | Test 2
2  | 8 | Test 2

但它总是显示每个budget_id的第一个寄存器。 Intead为Test 2,显示Test 1

到目前为止,这是我的SQL:

SELECT *
  FROM note
 GROUP BY budget_id
 ORDER BY id DESC

我尝试添加HAVING,子选择选择MAX字段created_at,但没有。

修改

在做了我被告知的事情后,我设法让它工作,但现在查询只返回每个budget_id的SECOND寄存器。这是我的SQL:

SELECT  MAX(n.id),
        c.name, 
        MAX(n.comment)
  FROM  note n,
        budget b,
        customer c
 WHERE  n.budget_id = b.id
   AND  b.customer_id = c.id
 GROUP  BY n.budget_id
 ORDER  BY n.id DESC

3 个答案:

答案 0 :(得分:1)

使用group by:

选择每个budget_id的最大ID
SELECT MAX(id) as id, budget_id, MAX(comment) as comment
FROM table GROUP BY budget_id

虽然MySQL不会在注释列上要求MAX,但正确的SQL确实需要对不在组中的每个列进行聚合(如果您在Oracle上尝试使用注释列上的聚合函数进行相同的查询,则会得到一个误差)

答案 1 :(得分:1)

我认为查询就是这个

select id, budget_id,[comment]
from note 
where id in 
(select max(id)
from note 
group by budget_id)
order by id desc

在你的问题中,我只看到你想要获得每个budget_id的最大ID,如果你的目的不是这个,请提供更多样本或描述清楚!

答案 2 :(得分:0)

您必须选择最大ID和评论,然后按budget_id分组。

SELECT max(id)id,max(comment)as comment,budget_id from table group by budget_id order by max(id)