2017-06-20 65 views
1

我在Oracle数据库中有一个表,其中包含机器事务,并且我需要查找对产品执行的最后一个操作的时间。通过具有多个时间戳的唯一ID获取最新的表条目

产品通过一个唯一的ID进行跟踪,机器动作全部都有时间戳。该产品并不总是打到每台机器上,否则我只能静态调用最后一台机器上的时间戳。我期望从一个特定的过程中获取数据,并在2016年1月1日之后,其逻辑已经在其他查询中起作用。

enter image description here

我的查询尝试迄今为止低于,这将返回所有条目,所以我需要的东西砍下只是最后一个动作:

select UniqueID, TimeStamp, MachineName 
from TransactionTable 
where ActionPerformed like 'action' 
and TimeStamp > '1/1/2016' 
group by UniqueID, TimeStamp 
order by UniqueId, TimeStamp desc 
+0

请阅读http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-:按日期倒序排列提问/ 285557和接受的答案 –

+0

您正在使用哪个[DBMS](https://en.wikipedia.org/wiki/DBMS)? Postgres的?甲骨文? –

+0

Oracle数据库。我无法格式化表格,使其以块形式出现,所以我认为图片比没有好。我的线返回不断丢失或双倍间隔。感谢您的编辑。 – SofaH3ro

回答

1

您可以为每个UniqueID的序列

SELECT * 
    FROM  
     (SELECT UniqueID, TimeStamp, MachineName, 
     ROW_NUMBER() OVER (PARTITION BY UniqueID ORDER BY TimeStamp DESC) 
     AS SEQ 
     FROM TransactionTable 
     WHERE ActionPerformed LIKE 'action' 
     AND TimeStamp > '1/1/2016' 
)PR 
    WHERE SEQ = 1 
+1

''1/1/2016''不是'TIMESTAMP'它是一个字符串文字 - Oracle会尝试使用'TO_TIMESTAMP'将其隐式转换为匹配的数据类型'NLS_TIMESTAMP_FORMAT'会话参数作为格式模型。如果这不匹配,或者更糟糕的是,在以后的日期更改,则查询将失败。最好使用时间戳文字'TIMESTAMP'2016-01-01 00:00:00'或者执行显式调用指定格式模型的'TO_TIMESTAMP'。 – MT0

相关问题