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. Вмъкване в таблица с оператор select плюс допълнителна колона в SQL Server 2008

  2. Опростен синтаксис:Множество ограничения в израза Alter Table

  3. Грешка при влизане в SQL Server:Неуспешно влизане за потребител 'NT AUTHORITY\SYSTEM'

  4. Създайте тригер „Вместо“ в SQL Server

  5. Как мога да клонирам база данни на SQL Server на същия сървър в SQL Server 2008 Express?