我需要为每个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
答案 0 :(得分:1)
使用group by:
选择每个budget_id的最大IDSELECT 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)