Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

TSQL Finding Order yang terjadi dalam 3 bulan berturut-turut

Sunting: Singkirkan atau MAX() OVER (PARTITION BY ...) karena itu tampaknya mematikan kinerja.

;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. Ubah Batasan CHECK di SQL Server menggunakan T-SQL

  2. Apa tujuan dari tabel sistem master..spt_values ​​dan apa arti dari nilainya?

  3. Cara Membuat Kunci Asing Komposit di SQL Server (Contoh T-SQL)

  4. Mana yang lebih baik:Pencarian Bookmark/Kunci atau Pemindaian Indeks

  5. Bagaimana Saya Dapat Mengurutkan Kolom 'Nomor Versi' Secara Umum Menggunakan Kueri SQL Server