sql >> データベース >  >> RDS >> Sqlserver

3 か月連続で発生した TSQL Finding Order

    編集: MAX() OVER (PARTITION BY ...) を取り除きました パフォーマンスが低下しているように見えたので.

    ;WITH cte AS ( 
    SELECT    CustID  ,
              OrderDate,
              DATEPART(YEAR, OrderDate)*12 + DATEPART(MONTH, OrderDate) AS YM
     FROM     Orders
     ),
     cte1 AS ( 
    SELECT    CustID  ,
              OrderDate,
              YM,
              YM - DENSE_RANK() OVER (PARTITION BY CustID ORDER BY YM) AS G
     FROM     cte
     ),
     cte2 As
     (
     SELECT CustID  ,
              MIN(OrderDate) AS Mn,
              MAX(OrderDate) AS Mx
     FROM cte1
    GROUP BY CustID, G
    HAVING MAX(YM)-MIN(YM) >=2 
     )
    SELECT     c.CustName, o.OrderDate, YEAR(o.OrderDate) AS YEAR
    FROM         Customers AS c INNER JOIN
                          Orders AS o ON c.CustID = o.CustID
    INNER JOIN  cte2 c2 ON c2.CustID = o.CustID and o.OrderDate between Mn and Mx
    order by c.CustName, o.OrderDate
    


    1. グーグルマップの座標をmysqlデータベースに転送する

    2. Mysql前のレコードの値でレコードを更新する

    3. SQLフルテキスト'contains'関数内の二重引用符をどのようにエスケープしますか?

    4. MySQLのデフォルトの文字セット/照合をどのように把握できますか