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

T-SQL - ИЗБЕРЕТЕ по най-близката дата и ГРУПИРАНЕ ПО ID

можете да опитате това.

DECLARE @Date DATE = '10/01/2010';

WITH cte AS
    (
    SELECT ID, LinkedID, ABS(DATEDIFF(DD, @date, DATE)) diff,
        ROW_NUMBER() OVER (PARTITION BY LinkedID ORDER BY ABS(DATEDIFF(DD, @date, DATE))) AS SEQUENCE
    FROM MyTable
    )

SELECT *
FROM cte
WHERE SEQUENCE = 1
ORDER BY ID
;

Не сте посочили как искате да се справите със случая, при който множество редове в група LinkedID представляват най-близката до целевата дата. Това решение ще включва само един ред и в този случай не можете да гарантирате кой ред от множеството валидни стойности е включен.

Можете да промените ROW_NUMBER() с RANK() в заявката, ако искате да включите всички редове, които представляват най-близката стойност.



  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 заявка в sql сървър 2005?

  2. Начини за мигриране на база данни на SQL Server към Azure SQL база данни

  3. SQL Server Промяна на името на базата данни

  4. Формат на SQL Server Дата ДД.ММ.ГГГГ ЧЧ:ММ:СС

  5. Раздробяване на SQL Server XML с Unicode знаци