请考虑以下情况。
我有一个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消息转换为快速格式"等。
但我想发布最后一个状态,例如"已完成的消息发送到目的地"或"失败的消息发送到目的地"取决于最后的状态。我怎样才能做到这一点?请建议。
答案 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字段,并根据该字段进行排序。