簡體   English   中英

MySQL在哪里和不同和限制

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM