sql >> Databáze >  >> RDS >> Sqlserver

TSQL Finding Order, ke kterému došlo ve 3 po sobě jdoucích měsících

Upravit: Zbavil jsem se nebo MAX() OVER (PARTITION BY ...) protože se zdálo, že to zabije výkon.

;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. Výběr hodnot z proměnné tabulky Oracle / pole?

  2. Kam mám uložit připojovací řetězec databáze?

  3. Nastavení cizího klíče bigInteger na bigIncrements v Laravel 5.4

  4. Je vygenerována tabulka Hibernate_sequence