描述:我们希望了解特定月份的一些客户购买习惯模式。 我们担心从6个月前开始的三个月内向客户销售图书并延长两个月。
我需要帮助解决此问题 - 问题:显示所讨论的三个月中正好一个月内购买的所有客户的客户ID和名称。例如,客户可能会在第二个月进行购买,但不会在第一个月或第三个月进行购买。
回答类似问题:显示所讨论的任何月份内没有购买的客户的客户ID和名称。
set @rundate = current_date;
set @Mnth_1 = DATE_SUB(@rundate, INTERVAL 6 MONTH);
set @Mnth_2 = DATE_SUB(@rundate, INTERVAL 5 MONTH);
set @Mnth_3 = DATE_SUB(@rundate, INTERVAL 4 MONTH);
Select Distinct c_id, c_name
From a_bkorders.bkv_CustOrders
Where order_id Not IN (
Select order_id
From a_bkorders.bkv_CustOrders
Where Date_format(order_date, '%M %Y') = Date_format(@Mnth_1, '%M %Y'))
and order_id Not IN (
Select order_id
From a_bkorders.bkv_CustOrders
Where Date_format(order_date, '%M %Y') = Date_format(@Mnth_2, '%M %Y'))
and order_id Not IN (
Select order_id
From a_bkorders.bkv_CustOrders
Where Date_format(order_date, '%M %Y') = Date_format(@Mnth_3, '%M %Y'));
答案 0 :(得分:0)
试试这个我不确定但可能适合你。
set @rundate = current_date;
set @Mnth_1 = DATE_SUB(@rundate, INTERVAL 6 MONTH);
set @Mnth_2 = DATE_SUB(@rundate, INTERVAL 5 MONTH);
set @Mnth_3 = DATE_SUB(@rundate, INTERVAL 4 MONTH);
Select Distinct c_id, c_name
From a_bkorders.bkv_CustOrders
Where order_id Not IN (
Select order_id
From a_bkorders.bkv_CustOrders
Where Date_format(order_date, '%M %Y') = Date_format(@Mnth_1, '%M %Y') and Date_format(order_date, '%M %Y') = Date_format(@Mnth_2, '%M %Y') and Date_format(order_date, '%M %Y') = Date_format(@Mnth_3, '%M %Y') )
答案 1 :(得分:0)
因此,如果您需要一段时间,您可以使用BETWEEN
构造。另外我认为最好使用AND NOT EXISTS
然后NOT IN
。
Select Distinct c_id, c_name
From a_bkorders.bkv_CustOrders
Where order_id NOT IN (
Select order_id
From a_bkorders.bkv_CustOrders
Where order_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 6 MONTH) AND DATE_SUB(CURDATE(), INTERVAL 4 MONTH)
)