Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

T-SQL - CHỌN theo ngày gần nhất và NHÓM THEO ID

bạn có thể thử cái này.

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
;

Bạn đã không chỉ ra cách bạn muốn xử lý trường hợp nhiều hàng trong nhóm LinkedID đại diện cho ngày gần nhất với mục tiêu. Giải pháp này sẽ chỉ bao gồm một hàng Và trong trường hợp này, bạn không thể đảm bảo hàng nào trong số nhiều giá trị hợp lệ được bao gồm.

Bạn có thể thay đổi ROW_NUMBER () bằng RANK () trong truy vấn nếu bạn muốn bao gồm tất cả các hàng đại diện cho giá trị gần nhất.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Không thể nhập dữ liệu từ excel 2003 vào cơ sở dữ liệu bằng hàm openrowset

  2. Hiểu các hàm GROUPING và GROUPING_ID trong SQL Server

  3. Tạo tên ngẫu nhiên trong sql

  4. Nhật ký giao dịch SQL Server, Phần 2:Kiến trúc nhật ký

  5. Xóa các bản sao khỏi tập dữ liệu lớn (> 100Mio hàng)