首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL for each循环-如何

SQL for each循环-如何
EN

Stack Overflow用户
提问于 2014-05-20 21:47:10
回答 2查看 73关注 0票数 1

我有一个示例表:

代码语言:javascript
复制
Machine_ID | ID | STATE
3210 | 543210 | ACTIVATION
3210 | 543789 | ACTIVE
1212 | 111111 | ACTIVE
1212 | 111222 | ACTIVE
4444 | 444444 | STOPPED
4444 | 555555 | STARTED

我所要做的就是获得每台机器的最新状态(更大的ID =稍后的操作)

伪码:

代码语言:javascript
复制
 foreach Machine_ID
     select * where ID greatest

我的输出表应该如下所示:

代码语言:javascript
复制
Machine_ID | ID | STATE
3210 | 543789 | ACTIVE
1212 | 111222 | ACTIVE
4444 | 555555 | STARTED

谢谢你的建议。请描述您的解决方案,因为许多其他人也可以使用它(我在google或任何教程中都没有找到以下示例)。我使用Oracle DB

EN

回答 2

Stack Overflow用户

发布于 2014-05-20 21:50:33

您可以使用keep构造来获得以下内容:

代码语言:javascript
复制
select machine_id, max(id),
       max(state) keep (dense_rank first order by id desc) as laststate
from machines m
group by machine_id;
票数 2
EN

Stack Overflow用户

发布于 2014-05-20 21:51:49

只要有可能,您就应该始终采用基于集合的方法来处理数据。在这种情况下,您可以通过创建每个计算机的最大ID (GROUPed)的派生表,然后JOIN返回到此派生表来完成此操作:

代码语言:javascript
复制
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 fiddle Here

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23761622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档