更新查询按组组合并设定最低日期(Update query combined by group and

2019-10-17 14:41发布

我完全糊涂了有关如何获得此查询完成。

如何实现这个查询没有大的表现的影响(如表包含数千行)?

请指教!

MyTable的

pktimestmp | sw_id | url_id |  open_date   | end_date  
-------------------------------------------------------
xxx0       |  101  |  com   |  2013-01-01  | 2013-01-30
xxx1       |  202  |  net   |  2013-01-01  | 2013-01-30
xxx2       |  202  |  net   |  2013-01-15  | 2013-02-28 *
xxx3       |  303  |  com   |  2013-01-01  | 2013-01-30 
xxx4       |  303  |  com   |  2013-02-01  | 2013-02-15 *
xxx5       |  303  |  com   |  2013-03-01  | 2013-03-15 *
xxx6       |  404  |  org   |  2013-01-01  | 2013-01-30 
xxx7       |  404  |  org   |  2013-02-01  | 2013-02-15 *
xxx8       |  404  |  gov   |  2013-02-01  | 2013-02-15
xxx9       |  404  |  gov   |  2013-02-01  | 2013-02-15 

...

更新查询上:

日期,其中软件和URL是相同的(即SW_ID和url_id)。

我们设置Opendate里和结束日期,以较少的(分)发生。

xxx2       |  202  |  net   |  2013-01-15  | 2013-02-28
will be
xxx2       |  202  |  net   |  2013-01-01  | 2013-01-30 

here we have updated 
open_date to min(open_date)
and 
end_date to min(end_date)
from same sw and url.

(这将是很好,如果我们仅仅因为他们是“相同的”更新,其中是有区别的,例如无需更新xxx8和xxx9)

MyTable的 (* =更新的行)

pktimestmp | sw_id | url_id |  open_date   | end_date
-------------------------------------------------------
xxx0       |  101  |  com   |  2013-01-01  | 2013-01-30
xxx1       |  202  |  net   |  2013-01-01  | 2013-01-30
xxx2       |  202  |  net   |  2013-01-01  | 2013-01-30 *
xxx3       |  303  |  com   |  2013-01-01  | 2013-01-30 
xxx4       |  303  |  com   |  2013-01-01  | 2013-01-30 *
xxx5       |  303  |  com   |  2013-01-01  | 2013-01-30 *
xxx6       |  404  |  org   |  2013-01-01  | 2013-01-30 
xxx7       |  404  |  org   |  2013-01-01  | 2013-01-30 *
xxx8       |  404  |  gov   |  2013-02-01  | 2013-02-15
xxx9       |  404  |  gov   |  2013-02-01  | 2013-02-15 

提前致谢! (而且没有我没权重模型表):)

任何帮助表示赞赏,网址,提示,电子书,网站...

Answer 1:

以下,就可以(在几乎任何RDBMS):

UPDATE MyTable as a SET (open_date, close_date) 
                        = (SELECT MIN(open_date), MIN(close_date)
                           FROM MyTable as b
                           WHERE b.sw_id = a.sw_id
                             AND b.url_id = a.url_id)
WHERE EXISTS (SELECT *
              FROM MyTable as b
              WHERE b.sw_id = a.sw_id
                AND b.url_id = a.url_id
                AND (b.open_date < a.open_date OR b.close_date < a.close_date))

产生预期的,只有4行更新(对我的iSeries实例测试):

PKTIMESTAMP         SW_ID  URL_ID  OPEN_DATE   CLOSE_DATE
xxx0                101    com     2013-01-01  2013-01-30
xxx1                202    net     2013-01-01  2013-01-30
xxx2                202    net     2013-01-01  2013-01-30
xxx3                303    com     2013-01-01  2013-01-30
xxx4                303    com     2013-01-01  2013-01-30
xxx5                303    com     2013-01-01  2013-01-30
xxx6                404    org     2013-01-01  2013-01-30
xxx7                404    org     2013-01-01  2013-01-30
xxx8                404    gov     2013-02-01  2013-02-15
xxx9                404    gov     2013-02-01  2013-02-15


文章来源: Update query combined by group and set minimum dates
标签: sql db2