Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

TSQL फाइंडिंग ऑर्डर जो लगातार 3 महीनों में हुआ

संपादित करें: छुटकारा मिल गया या 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एसक्यूएल जॉब में चरण 1 से चरण 2 तक मूल्य कैसे प्राप्त करें?

  2. ADO.NET के साथ SQL सर्वर के लिए डिफ़ॉल्ट लेनदेन अलगाव स्तर क्या है?

  3. SQL सर्वर में sysjobhistory डेटाटाइम और अवधि कॉलम प्रारूपित करें

  4. BitConverter के साथ SQL सर्वर varbinary bigint.ToInt64 मान भिन्न हैं

  5. संग्रहित प्रक्रिया में एसक्यूएल इन क्लॉज