2012-08-31 73 views
0

我有一个表CUSTOMER_ORDER如下通过mmysql查询或过程获取缺失的时间段?

mysql> select * from customer_order; 
+---------+---------+-----------+------------------+----------------+ 
| cust_id | orderno | region_cd | order_start_date |order_del_date | 
+---------+---------+-----------+------------------+----------------+ 
| CU_082 | ONO_001 | reg1  | 2012-04-25  | 2012-08-25  | 
| CU_082 | ONO_002 | reg1  | 2012-04-28  | 2012-11-28  | 
| CU_083 | ONO_002 | reg2  | 2012-04-28  | 2012-11-28  | 
| CU_082 | ONO_003 | reg1  | 2012-04-25  | 2012-08-25  | 
| CU_084 | ONO_004 | reg4  | 2012-04-25  | 2012-10-25  | 

我需要一个表像这样...我得到....如下

mysql> select order_start_date,order_del_date,orderno,cust_id from customer_order wh 
ere order_start_date >= '2012-04-25' AND order_del_date <='2012-12-28' and cust_i 
d IN ('36082','36088') order by cust_id ; 
+------------------+----------------+---------+---------+ 
| order_start_date | order_del_date | pid  | emp_id | 
+------------------+----------------+---------+---------+ 
| 2012-04-25  | 2012-05-25  | ONO_001 | CU_082 | 
| 2012-08-22  | 2012-12-28  | ONO_004 | CU_082 | 
| 2012-06-22  | 2012-08-28  | ONO_003 | CU_082 | 
| 2012-05-27  | 2012-06-25  | ONO_002 | CU_082 | 
| 2012-04-25  | 2012-05-25  | ONO_001 | CU_082 | 
| 2012-05-27  | 2012-06-25  | ONO_001 | CU_082 | 
| 2012-04-30  | 2012-06-25  | ONO_001 | CU_088 | 
| 2012-06-28  | 2012-07-15  | ONO_002 | CU_088 | 
| 2012-07-28  | 2012-08-25  | ONO_003 | CU_088 | 
| 2012-07-16  | 2012-09-25  | ONO_004 | CU_088 | 
+------------------+----------------+---------+---------+ 

现在我需要在这个表中查询。 .. 获得 为每一个客户在这里,我们在上表中获取从笏日期间的数据,以笏迄今为止他的订单处理细节.. 现在为每一个客户我SHLD找到其中THR是没有订单的处理周期。 ..

例如cust_id =CU_088 他将他的订单从6月30日处理到6月25日 从6月28日到7月15日 (这里thr是一个差异,是没有订单或从6月26日至27日完成任何处理。是笏是所需的结果) **多了一个小鬼考虑的是...在我们THR找到下一个入口 从28日订单流程七月至8月25日 WRT前一个条目即6月28日至15july我们发现,对于这个客户THR没有采取或处理从7月16日至27日.. 但与上一个TAT是7月16日至9月25日,他与不同order_no thrfore间隙7月16日至7月27日的订单顺序是这里如此充满这种的情况也需要检查... 我需要输出作为像这样..

+------------------+----------------+---------+---------+ 
| order_start_date | order_del_date | pid  | emp_id | 
+------------------+----------------+---------+---------+ 
| 2012-06-26  | 2012-06-27  | ONO_001 | CU_088 | 
+------------------+----------------+---------+---------+ 

要么是这是更有效的应该给我在THR疫情周报期间是不采取行动为客户... 帮助下完成查询或过程我写的查询做了以上所有的事情。

我新来的DB queries..so请帮我..

+0

是26日至27日在表中可用的6月记录? –

回答

0

为了获取订单之间的每一个“差距”,你可以使用自联接:

SELECT o1.cust_id, 
     o1.order_del_date  + INTERVAL 1 DAY AS gap_begin, 
     MIN(o2.order_start_date) - INTERVAL 1 DAY AS gap_end 
FROM  customer_order o1 
    JOIN customer_order o2 ON o1.cust_id = o2.cust_id 
          AND o1.order_del_date <= o2.order_start_date 
GROUP BY o1.cust_id, o1.order_del_date 
HAVING gap_begin < gap_end 
+0

非常感谢你的答复... –

+0

上面的查询完全适用中的cust_id - CU_088而不是其他人?是不是由于表中的条目.. ??? –

+0

@AnuB:你能举出一些结果不正确的示例数据吗? – eggyal