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' 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 条记录在 RouterA 之后显示 1,我只需要取一个,并避免另一个,如果它们只有 0,同样,只取一个,所以我想有我的查询来显示这一点。

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

谢谢!

4

2 回答 2

1

您正在按所有列进行分组,而不使用任何聚合函数,这相当于select distinct.

假设ack只能是零或一,您可以max()在该列上使用,并将其排除在group by

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

不确定created预期的行为方式,您可能也希望对该列执行相同的操作。

在更复杂的情况下,您可以使用分析函数按某些标准对行进行排名,然后在外部过滤select,但我认为这在这里有点过分了。

于 2012-10-20T07:55:00.490 回答
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
于 2012-10-20T07:50:40.133 回答