2013-07-29 72 views
0

我有一張表,每30秒獲取一條新記錄。我需要知道每個用戶的最新記錄和時間戳記值。如何獲得唯一值限制爲選擇*使用SQL

我寫了下面的查詢:

select created_user, MAX(created_date) 
from gisadmin.FORESTRY_LOCATIONLOG_vw 
Group by created_user 

這讓我正是我想要的。問題是我需要將這個輸入的應用程序預先定義爲select語句的一部分(試圖提供幫助)。

因此,它是強制性的,查詢開始

select * from gisadmin.FORESTRY_LOCATIONLOG_vw WHERE 

有沒有人對如何使這項工作

+2

重寫應用程序。它不應該限制你。否則,你會遇到困難,所有疑問:) –

+0

這並不總是一個可行的選擇(事實上,它幾乎從來沒有......) – user2366842

+0

這是現成的軟件和重寫不是一個選項 – user1074006

回答

3

你可以使用EXISTS

SELECT * 
FROM gisadmin.FORESTRY_LOCATIONLOG_vw 
WHERE EXISTS (SELECT * 
       FROM (SELECT created_user, MAX(created_date)'created_date' 
        FROM gisadmin.FORESTRY_LOCATIONLOG_vw 
        GROUP BY created_user) b 
       WHERE gisadmin.FORESTRY_LOCATIONLOG_vw.created_user = b.created_user 
       AND gisadmin.FORESTRY_LOCATIONLOG_vw.created_date = b.created_date) 
+0

拉同一組列。這將返回897條記錄,我期待的結果是2條記錄,因爲我現在只有2個用戶打這個表。 – user1074006

+0

這很奇怪,2個用戶的897條記錄?它適用於我的測試數據。 –

+0

記錄是否都具有相同的用戶/日期組合?如果是這樣,是否有另一個領域可以用來區分? –

0

這裏的想法是一個快速的解決方案:使用它作爲子查詢

select created_user, MAX(created_date) 
from 
(
select * from gisadmin.FORESTRY_LOCATIONLOG_vw WHERE 1=1 //append this 
) 
Group by created_user 

請注意,我添加了1=1,它將始終評估爲true以處理您的Where子句。

+0

做的op希望將他的查詢作爲起點而不是子查詢? – cableload

+0

select * from gisadmin.FORESTRY_LOCATIONLOG_vw WHERE必須作爲起點,不能改變,因爲應用程序中沒有辦法改變它,所以它是硬編碼的。 – user1074006

+0

@ user1074006所以你不能編寫和運行SQL?我認爲你需要更多地闡明你的問題並解釋你的環境 –

-1
select * 
from gisadmin.FORESTRY_LOCATIONLOG_vw 
WHERE (something that returns no records) 

無論第一個查詢返回什麼,然後只是做你自己的勝利。

select created_user, MAX(created_date) 
from gisadmin.FORESTRY_LOCATIONLOG_vw 
Group by created_user 
+0

select * from gisadmin.FORESTRY_LOCATIONLOG_vw WHERE必須作爲起點,不能改變,因爲在應用程序中沒有辦法改變它,它是硬編碼的。 – user1074006

+0

@ user1074006如果您只是定義了一條WHERE語句而不返回任何記錄,那麼忽略該部分查詢,然後再運行一個單獨的記錄呢? – tkendrick20

+0

也許是兩者的結合?你需要確保你從底部查詢 – cableload