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

Nhận 1 hàng trên cùng của mỗi nhóm

;WITH cte AS
(
   SELECT *,
         ROW_NUMBER() OVER (PARTITION BY DocumentID ORDER BY DateCreated DESC) AS rn
   FROM DocumentStatusLogs
)
SELECT *
FROM cte
WHERE rn = 1

Nếu bạn mong đợi 2 mục nhập mỗi ngày, thì tùy chọn này sẽ chọn một mục. Để nhận cả hai mục trong một ngày, hãy sử dụng DENSE_RANK thay thế

Còn về chuẩn hóa hay không thì tùy bạn có muốn:

  • duy trì trạng thái ở 2 nơi
  • lưu giữ lịch sử trạng thái
  • ...

Khi nó tồn tại, bạn bảo tồn lịch sử trạng thái. Nếu bạn cũng muốn có trạng thái mới nhất trong bảng chính (là trạng thái không chuẩn hóa), bạn cần một trình kích hoạt để duy trì "trạng thái" trong bảng chính. hoặc bỏ bảng lịch sử trạng thái này.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kiểm tra xem một Bảng có được tham chiếu bởi một khóa ngoại trong SQL Server với OBJECTPROPERTY () hay không

  2. Báo cáo Dữ liệu Hiệu suất SQLDIAG qua Công cụ Tiện ích RML | Khắc phục sự cố hiệu suất máy chủ SQL -7

  3. Tìm phụ thuộc trong SQL Server:sql_expression_dependencies

  4. Cách thay đổi đối chiếu của cơ sở dữ liệu SQL Server bằng T-SQL

  5. Kết hợp hai bảng không có trường chung