2012-10-20 21 views
0

當我運行以下查詢:甲骨文 - 從輸出行合併成1

SELECT datetime_up, logic_id,eqp_name,ack, created FROM NAS_db.main WHERE TRUNC(datetime_up,'DD') >= TO_TIMESTAMP ('04/18/2012', 'MM/DD/YYYY') and TRUNC(datetime_up,'DD') <= TO_TIMESTAMP ('04/21/2012', 'MM/DD/YYYY') AND eqp_name ='Router-A' GROUP BY datetime_up,eqp_name, logic_id,ack,created

我得到以下輸出:

datetime_up    logic_id eqp_name  ack created 
4/19/2012 5:52:04 PM IP_1.1.1.1_ Router-A  1  0 

4/19/2012 5:52:04 PM IP_1.1.1.1_ Router-A  0  0 

好了,這些都是連續的記錄,我需要...在這種情況下,第一條記錄有1,只取這一條,而不是2.

我的意思是,如果我查詢,並且我有1000條記錄顯示1後t他只需要一個,並且避開另一個,如果他們只有0,相同,只需要一個,所以我想讓我的查詢顯示出來。

4/19/2012 5:52:04 PM IP_1.1.1.1_ Router-A  1  0 

謝謝!

回答

1

你被所有列的分組,而無需使用任何聚合函數,這相當於select distinct

假設ack只能是0或1,您可以在該列使用max(),並從group by排除:

SELECT datetime_up, logic_id, eqp_name, max(ack), created 
... 
GROUP BY datetime_up, eqp_name, logic_id, created 

不知道是怎麼created預期行爲,你可能想要做的與該欄相同。

在更復雜的情況下,您可以使用分析函數按照某些條件對行進行排名,然後在外部篩選select,但我認爲這在這裏是過度的。

+0

謝謝!那拯救了我的一天 – Marco

0

試試這個

SELECT datetime_up, logic_id,eqp_name,ack, created FROM NAS_db.main WHERE  
    TRUNC(datetime_up,'DD') >= TO_TIMESTAMP ('04/18/2012', 'MM/DD/YYYY') and 
TRUNC(datetime_up,'DD') <= TO_TIMESTAMP ('04/21/2012', 'MM/DD/YYYY') AND eqp_name 
='Router-A' where ack and created!=0 
GROUP BY datetime_up,eqp_name, logic_id,ack,created 

或改變where條件作爲

where ack=1