[英]MySQL with Where IN and Distinct and Limit
SELECT id, server_id, start_time, end_time
FROM errors
WHERE server_id in (3, 12, 24, 25, 26, 27, 28, 29, 30)
ORDER BY id DESC
LIMIT 9
这是我试图运行给我结果的查询,其中server_id
= 3, 12, 24, 25, 26, 27, 28, 29, 30
。 相反,我收到的是server_id
= 25, 25, 12, 25, 27, 27, 28, 28, 27
。 请注意重复的server_ids。 该查询为我提供了唯一的id
但有重复的server_id
。
有没有一种方法可以让我看到每个server_id
的最后一个id
?
我已经尝试执行ORDER BY server_id
但这给了我同样的问题。
我试过运行DISTINCT
但这也不起作用。
您遇到的问题是,每台服务器仅需要一条记录,记录中包含最大ID和相关信息。 您需要将结果限制为最大ID ...这是一种方法...
SELECT id, server_id, start_time, end_time
FROM errors
WHERE server_id in (3, 12, 24, 25, 26, 27, 28, 29, 30)
and ID = (Select max(ID) from errors E2 where E2.server_ID=errors.server_ID)
ORDER BY id DESC
LIMIT 9
您将必须使用一些汇总功能。
就像是
select
server_id,
max(id),
avg(start_time),--for example
avg(end_time)--for example
from errors
where server_id in (3, 12, 24, 25, 26, 27, 28, 29, 30)
group by server_id
order by id desc
如果您需要start_time和end_time对应于server_id的最大ID,则可以这样做
select e.id, e.server_id, e.start_time, e.end_time
from errors e
join (select server_id, max(id) maxid
from errors
group by server_id) t
on t.maxid = e.id and e.server_id = t.server_id
where e.server_id in (3, 12, 24, 25, 26, 27, 28, 29, 30)
order by e.id DESC
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.