如何使用SQL获取每条记录的最后状态消息?

时间:2014-03-17 19:17:54

标签: java sql oracle

请考虑以下情况。

我有一个Java应用程序,它使用Oracle数据库存储一些状态代码和消息。

例如:我有3个阶段的病历记录(假设1.接受课程2.翻译课程3.发送课程)。我们将数据存储到每一层的数据库中。当我们运行查询时,它将显示如下。

Name     Status        Status_Message
XYZ       11           XML message received
XYZ       21           XML message translated to swift format
XYZ       31           Completed message send to destination

ABC       11           XML message received
ABC       21           XML message translated to swift format
ABC       91           Failed message send to destination

在Java类上,我正在执行以下查询以获取最后一条状态消息。

select STATUS_MESSAGE from INTERFACE_MESSAGE_STATUS 
where NAME =  ? order by STATUS

我在网页上发布此状态消息。但我的问题是我没有得到最后的状态信息;它的表现不同。它有时打印"收到XML消息",有时" XML消息转换为快速格式"等。

但我想发布最后一个状态,例如"已完成的消息发送到目的地"或"失败的消息发送到目的地"取决于最后的状态。我怎样才能做到这一点?请建议。

2 个答案:

答案 0 :(得分:0)

您可以使用以下查询:

select 
    i.STATUS_MESSAGE 
from 
    INTERFACE_MESSAGE_STATUS i,
    (select 
        max(status) as last_status
    from
        INTERFACE_MESSAGE_STATUS 
    where
        name = ?) s
where 
    i.name = ? and
    i.status = s.last_status

在上面的示例中,我假设状态最高的状态是最后一个状态。

我建议你从这个选择查询中创建一个view,然后在你的代码库中使用它。原因是它更容易阅读,并且可以轻松选择多个last_statuses而不会使查询过于复杂。

答案 1 :(得分:0)

您没有指定明确的顺序。由于数据存储在Oracle中的HEAP中,因此没有给出特定的顺序。换句话说:很多因素会影响你得到的元素。只有显式ORDER BY才能保证所需的顺序。和/或在某些行上创建索引。

我的建议:在您的数据库中添加一个date_created字段,并根据该字段进行排序。