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

T-SQL - PILIH menurut tanggal terdekat dan DIKELOMPKAN OLEH ID

Anda dapat mencoba ini.

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
;

Anda tidak menunjukkan bagaimana Anda ingin menangani kasus di mana beberapa baris dalam grup LinkedID mewakili yang paling dekat dengan tanggal target. Solusi ini hanya akan menyertakan satu baris Dan, dalam hal ini Anda tidak dapat menjamin baris mana dari beberapa nilai valid yang disertakan.

Anda dapat mengubah ROW_NUMBER() dengan RANK() dalam kueri jika Anda ingin menyertakan semua baris yang mewakili nilai terdekat.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tentukan objek apa yang dibuat pengguna di SQL Server

  2. Mengapa penyetelan kinerja SQL adalah keterampilan manajemen basis data yang paling penting untuk dimiliki

  3. Antarmuka Jaringan SQL, kesalahan:50 - Terjadi kesalahan Runtime Database Lokal. Tidak dapat membuat instans otomatis

  4. SQL Server 2017:Fitur yang Tersedia di Linux

  5. Melaporkan Data Kinerja SQLDIAG melalui Alat Utilitas RML | Pemecahan Masalah Kinerja SQL Server -7