【问题标题】:SQL Statement Help - Select Only Customers with no order for past 3 monthsSQL 语句帮助 - 仅选择过去 3 个月没有订单的客户
【发布时间】:2011-08-21 14:40:51
【问题描述】:

希望你们一切都好。我需要查询。请帮我解决这个问题。

这里是场景。我们有两个表

  1. 客户
  2. 订单

我只想获得过去三个月内没有订购任何东西的客户

请帮助我。我卡住了。提前致谢

【问题讨论】:

  • 显示其他列的数据类型
  • 是在mysql还是在sql???具体
  • @op - 您能否向我们提供表结构,因为查询会因您的表而异
  • 同意diEcho:你想在MySQL 还是SQL Server 中使用它?您是否偶然将mysqlmssql 混淆了?

标签: mysql sql sql-server-2005 query-help


【解决方案1】:
SELECT customer_number
  FROM Customers
EXCEPT 
SELECT customer_number
  FROM Orders
 WHERE DATEADD(MONTH,-3, CURRENT_TIMESTAMP) < order_date;

【讨论】:

    【解决方案2】:
    ;WITH CTE_LastOrder (CustomerId, LastOrderDate) As
    (
    SELECT CustomerId, MAX(OrderDate) LastOrderDate
    FROM Orders 
    GROUP By CustomerId
    )
    SELECT * from Customers C
    JOIN CTE_LastOrder LO ON C.CustomerId = LO.CustomerId
    WHERE LO.LastOrderDate > Cast(Floor(Cast(dateAdd(Month,-3, GetDate()) as Float))as DateTime) 
    

    以上是 SQL Server 的基本 sql。语法可能略有不同。

    【讨论】:

    • 第一个细微差别是 mysql 不支持 CTE。
    【解决方案3】:

    在不知道您的确切数据结构的情况下,我猜测如下:

    Select  CustomerCode,
        CustomerName
    
    From dbo.Customers
    where CustomerCode Not in (
                   Select CustomerCode
                   From dbo.Orders
                   Where OrderDate > Cast(Floor(Cast(dateAdd(Month,-3, GetDate()) as Float))as DateTime)
                  )
    

    【讨论】:

      猜你喜欢
      • 2010-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多