2017-06-20 54 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

相關問題