簡體   English   中英

每個循環的SQL - 如何

[英]SQL for each loop - how to

我有這個示例表:

Machine_ID | ID | STATE
3210 | 543210 | ACTIVATION
3210 | 543789 | ACTIVE
1212 | 111111 | ACTIVE
1212 | 111222 | ACTIVE
4444 | 444444 | STOPPED
4444 | 555555 | STARTED

我想做的就是獲得每台機器的最新狀態(更大的ID =以后的動作)

偽代碼:

 foreach Machine_ID
     select * where ID greatest

我的輸出表應如下所示:

Machine_ID | ID | STATE
3210 | 543789 | ACTIVE
1212 | 111222 | ACTIVE
4444 | 555555 | STARTED

感謝您的建議幫助。 請描述您的解決方案,因為許多其他人也可以使用它(我沒有在谷歌或任何教程中找到以下示例)。 我使用Oracle DB

你可以使用keep構造來獲得:

select machine_id, max(id),
       max(state) keep (dense_rank first order by id desc) as laststate
from machines m
group by machine_id;

只要有可能,您應始終采用基於集合的方法來處理數據。 在這種情況下,您可以通過創建每台計算機的最大ID( GROUP ed)的派生表,然后JOIN回到此派生表來執行此操作:

SELECT m.MachineID, m.ID, m.State
FROM Machine m
  INNER JOIN
  (
     SELECT MachineID, MAX(ID) AS MaxID
     FROM Machine
     GROUP BY MachineID) x
   ON m.MachineID = x.MachineID
      AND m.ID = x.MaxID;

Sql在這里小提琴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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