[英]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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.