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

Truy vấn SQL để chọn các thực thể từ bảng thay đổi lịch sử

Từ những gì tôi đọc, tôi giả sử rằng bạn muốn tất cả các công ty có trạng thái 1 trong phạm vi ngày của bạn. Nếu đây là những gì bạn muốn, điều đó khá dễ dàng.

Câu lệnh sau sẽ thực hiện công việc:

SELECT C.*
  FROM COMPANY C
  LEFT JOIN ( SELECT H.STATUS, H.COMPANY_ID
                FROM COMPANYSTATUS H
               WHERE H.STATUS_EFFECTIVE_DATE = (SELECT MAX(H1.STATUS_EFFECTIVE_DATE)
                                                  FROM COMPANYSTATUS H1
                                                 WHERE H1.COMPANY_ID = H.COMPANY_ID
                                                   AND H1.STATUS_EFFECTIVE_DATE <= '20171231'
             ) CH ON CH.COMPANY_ID = C.ID   
 WHERE ( C.STATUS = 1 AND CH.COMPANY_ID IS NULL ) -- CASE #1 : STATUS = 1 AND NEVER CHANGED (NO HISTORY)
    OR H.STATUS = 1

Những gì tôi đã làm là tạo chế độ xem lồng nhau với trạng thái cuối cùng cho đến khi kết thúc phạm vi ngày của bạn, vì vậy nếu lần thay đổi cuối cùng của trạng thái công ty là 1 thì công ty này sẽ được đưa vào kết quả của bạn. Chúng tôi không quan tâm đến những thay đổi sau phạm vi ngày của bạn, vì vậy tôi đưa ra hạn chế bên trong chế độ xem lồng nhau.

Sự bắt đầu của phạm vi của bạn là không đáng kể đối với yêu cầu này. Bạn có thể cần cho các mục đích khác, để tham gia các bảng khác.

Tôi là người của Oracle, vì vậy tôi nghĩ Ι có thể làm cho câu lệnh này tốt hơn nhiều bằng cách sử dụng phân tích Oracle, nhưng tôi nghĩ nó sẽ là một câu lệnh hợp lệ cho máy chủ SQL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để nhận số lượng hàng từ EXEC () trong TSQL SPROC?

  2. mysqldump tương đương cho SQL Server

  3. Các gói SQL Server:sự khác biệt giữa Quét chỉ mục / Tìm kiếm chỉ mục

  4. Tìm hiểu Luôn luôn BẬT Nhóm sẵn có giữa các Phiên bản Máy chủ SQL dựa trên Linux. Phần 1

  5. Bản đồ lại nguồn dữ liệu Crystal Report