像一年前的类似订单的SQL

时间:2012-02-20 08:50:48

标签: sql tsql

我有一个问题,我正在努力确定客户订单

  1. 客户在一年前的同一个月订购了这个订单 一个月。
  2. 本月一位客户订购但未在本月订购
  3. 客户本月订购但不是一年前。
  4. 我的数据看起来像这样。

    CustomerID      Month   Year    Value
    1                 2     2011       18
    1                 2     2012       16
    2                 1     2011       15
    3                 1     2012       13
    

    从此我希望返回(对于上述每个标准)

    1. 第1行和第1行2
    2. 第3行
    3. 第4行
    4. 我确信必须有一个优雅的解决方案,但对于我的生活我今天看不到它!

      到目前为止,我已经达到了这一点,但是我得到了很多重复,但是我错过了一些明显的东西?

      ;with t (ID, Yr, Mo) 
      As
      (
          Select ID, TransactionYearFK, TransactionMonthFK
          From dbo.MyData
      )
      
      Select * 
      From t tC
              Full Outer Join t tL On tC.ID = tL.ID And tC.Mo = tL.Mo And tL.Yr = tC.Yr - 1
      
      Where Coalesce(tC.ID, tL.ID) = 21110
      Order By tC.Yr, tC.Mo
      

1 个答案:

答案 0 :(得分:2)

如果您希望在一个查询中显示所有结果,则可以像这样重写您的条件:

  1. 年份必须不早于最后一年。

  2. 月份必须与当月相同,无论是本年还是去年。

  3. 假设您想要为每位客户每年返回每月的订单数量,您可以尝试这样的事情:

    SELECT
      CustomerID,
      ThisYear = COUNT(CASE Year WHEN YEAR(GETDATE()) THEN 1 ELSE NULL END),
      LastYear = COUNT(CASE Year WHEN YEAR(GETDATE()) THEN NULL ELSE 1 END)
    FROM data
    WHERE Year >= YEAR(GETDATE()) - 1
      AND Month = MONTH(GETDATE())
    GROUP BY
      CustomerID