Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Вземете най-добрия запис на същия FK при разлика в датата

Идеята е следната

  • Изберете всички дете поръчки в рамките на един час с минималния възможен (Parent)ID. (Предполагам тук, че най-ниският OrderID ще бъде и най-старият OrderID).
  • Свържете тези резултати с оригиналната таблица.
  • Използвайте тези резултати като основа на изявлението за актуализиране.

SQL израз

UPDATE  Orders
SET     ParentOrderID = p.ParentOrderID
FROM    Orders o
        INNER JOIN (
          SELECT  ParentOrderID = MIN(o1.OrderID), OrderID = o2.OrderID
          FROM    Orders o1
                  LEFT OUTER JOIN Orders o2 ON 
                    o2.CustomerID = o1.CustomerID
                    AND o2.OrderDate > o1.OrderDate
                    AND DATEADD(hh, -1, o2.OrderDate) < o1.OrderDate
          GROUP BY o2.OrderID
        ) p ON p.OrderID = o.OrderID


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да създадем свързания сървър за SQL Server 2008, където имаме база данни от 2000 и 2005 г.

  2. T-SQL:Как да използвам параметри в динамичен SQL?

  3. Как да изпълним съхранена процедура в php с помощта на sqlsrv и ? стилови параметри

  4. Какво е вътрешното представяне на datetime в sql сървър?

  5. Unicode SQL заявка W/ параметър вместо N префикс