Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

TSQL Tìm Lệnh đã xảy ra trong 3 tháng liên tiếp

Chỉnh sửa: Đã thoát hoặc MAX() OVER (PARTITION BY ...) vì điều đó dường như giết chết hiệu suất.

;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. bảng chuyển đổi đơn vị trong SQL

  2. Lỗi 'Phải khai báo biến vô hướng' khi chuyển tham số có giá trị bảng sang câu lệnh SQL được tham số hóa

  3. Máy chủ SQL bị thiếu chỉ mục

  4. TSQL-2008 SUM (X) HẾT (PHẦN ... ĐẶT HÀNG CỦA KHÁCH HÀNG)

  5. Trạng thái và phiên hoạt động của SQL Server