0

我有一个表 customer_order 如下

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  |
+------------------+----------------+---------+---------+

现在我需要在这张表上查询......为了在这里为每个客户获取数据,我们在上表中获取从 wat 日期到 wat 日期期间他的订单处理详细信息的数据......现在对于每个客户,我会找到thr 没有订单处理...

例如cust_id =CU_088 ,他的订单从 4 月 30 日到 6 月 25 日处理,从 6 月 28 日到 7 月 15 日(这里 thr 是一个差异,即 thr 是 6 月 26 日到 27 日没有接受订单或任何处理完成......这是必需的结果) **另外一个考虑因素是......在下一个条目中,我们发现 thr 是从 7 月 28 日到 8 月 25 日的订单流程,相对于之前的条目,即 6 月 28 日到 7 月 15 日,我们发现对于这个客户,thr 没有接受或处理订单从 7 月 16 日到 27 日.. 但是最后一个条目是 7 月 16 日到 9 月 25 日,他有一个不同 order_no 的订单,因为这里填补了 7 月 16 日到 7 月 27 日的空白,所以这种情况也需要检查。 .我需要得到这样的输出..

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

那是更有效的查询或程序应该给我在 thr 期间没有为客户执行任何操作...帮助我编写执行上述所有操作的查询。

我是数据库查询的新手..所以请帮帮我..

4

1 回答 1

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
于 2012-08-31T05:30:08.723 回答