【问题标题】:Can someone help me solve this with a simple subquery in the where clause?有人可以通过 where 子句中的简单子查询来帮助我解决这个问题吗?
【发布时间】:2013-10-28 06:32:15
【问题描述】:

说明:我们希望了解特定月份客户购买习惯的一些模式。 我们担心从 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'));

【问题讨论】:

  • 您能否澄清您的问题,如果需要请举例说明?
  • 我们关注从 6 个月前开始并延长两个月的三个月内向客户销售的图书。我有类似问题的答案。问题来了:

标签: mysql subquery logical-operators


【解决方案1】:

试试这个,我不确定,但可能对你有用。

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') )

【讨论】:

    【解决方案2】:

    因此,如果您需要一段时间,您可以使用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) )

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 2019-04-15
      • 2021-10-31
      • 1970-01-01
      相关资源
      最近更新 更多