【问题标题】:Displaying records that have more than 5 days inbetween them显示间隔超过 5 天的记录
【发布时间】:2016-10-05 08:30:43
【问题描述】:

我有两张桌子,

tblCustomer

客户 ID(PK)、名字、姓氏)

tblPurchases

PurchaseID(PK)、PurchaseDate、Qty、CustomerID(FK)。

我想按以下方式显示自上次购买后五 (5) 天或更长时间后购买产品的所有客户。

FirstName      diff in days since last purchase
Alex           7

谢谢!

【问题讨论】:

  • 到目前为止你尝试过什么?

标签: sql sql-server tsql join datediff


【解决方案1】:

试试下面的查询。

SELECT FirstName, DATEDIFF(DAY, t.PurchaseDate, getdate()) as 'diff in days since last purchase'
FROM tblCustomer c
 JOIN (SELECT CustomerID, MAX(PurchaseDate)PurchaseDate
       FROM tblPurchases
       GROUP BY CustomerID )t ON c.CustomerID=t.CustomerID
WHERE DATEDIFF(DAY, PurchaseDate, getdate())>5

【讨论】:

    【解决方案2】:
    SELECT FirstName, 
    DATEDIFF(DAY, t.PurchaseDate, getdate())  'diff in days since last purchase'
    FROM tblCustomer c
     JOIN (SELECT CustomerID, MAX(PurchaseDate)PurchaseDate
           FROM tblPurchases
           GROUP BY CustomerID )t ON c.CustomerID=t.CustomerID
    WHERE DATEDIFF(DAY, t.PurchaseDate, getdate())>5
    

    【讨论】:

      【解决方案3】:

      通过连接两个表格,根据每个 CustomerId 的最后购买日期给出一个行号。

      然后使用DATEDIFFcurrent datePurchaseDate之间的天数差异。
      并在WHERE子句中给出天数差异。

      查询

      ;WITH CTE AS(
          SELECT [rn] = ROW_NUMBER() OVER(
              PARTITION BY t.[CustomerID]
              ORDER BY t.[PurchaseDate] DESC
          ), t.[CustomerID], t.[FirstName], t.[PurchaseDate]
          FROM (
             SELECT t1.[CustomerID], t1.[FirstName], t2.[PurchaseDate]
             FROM [tblCustomer] t1
             JOIN [tblPurchases] t2
             ON t1.[CustomerID] = t2.[CustomerID]
          )t
      )
      SELECT [FirstName], 
      DATEDIFF(DAY, [PurchaseDate], GETDATE()) AS [diff in days since last purchase]
      FROM CTE
      WHERE [rn] = 1
      AND DATEDIFF(DAY, [PurchaseDate], GETDATE()) > 5;
      

      【讨论】:

        【解决方案4】:
        ;WITH T AS
        (
            SELECT 
                *,
                DATEDIFF(DAY, [PurchaseDate], GETDATE()) AS DiffInDays
            FROM @tblPurchases
            WHERE DATEDIFF(DAY, [PurchaseDate], GETDATE()) > 5
        )   
        SELECT
            C.FirstName,    
            MAX(DiffInDays) AS DiffInDays
        FROM T
        LEFT JOIN @tblCustomer C ON T.CustomerId=C.CustomerId
        GROUP BY C.FirstName
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-10-15
          • 1970-01-01
          • 2022-11-17
          • 1970-01-01
          • 2022-06-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多