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

Làm cách nào để lấy các bản ghi hiện tại dựa trên Ngày có hiệu lực?

Tôi cho rằng có nhiều cách khác để làm điều này, nhưng tôi nghĩ cách này hiệu quả:

DECLARE 
  @OrganizationID varchar(40)

SET @OrganizationID = 'SMESM1HTOVEOVE'

SELECT
  ro.ResourceID,
  ro.OrganizationID,
  max(ro.EffectiveDate)
FROM
  ResourceOrganization ro
WHERE
  ro.OrganizationID = @OrganizationID
GROUP BY
  ro.ResourceID,
  ro.OrganizationID
HAVING
  max(ro.EffectiveDate) = (
    SELECT 
      max(EffectiveDate)
    FROM 
      ResourceOrganization
    WHERE 
      ResourceID = ro.ResourceID)

Đây là SQLFiddle để chơi với.

CHỈNH SỬA:Trên thực tế, điều đó có lẽ quá phức tạp. Hãy thử cái này:

DECLARE 
  @OrganizationID varchar(40)

SET @OrganizationID = 'SMESM1HTOVEOVE'

SELECT
  ro.ResourceID,
  ro.OrganizationID,
  ro.EffectiveDate
FROM
  ResourceOrganization ro
WHERE
  ro.OrganizationID = @OrganizationID
  AND ro.EffectiveDate = (
    SELECT 
      max(EffectiveDate)
    FROM 
      ResourceOrganization
    WHERE 
      ResourceID = ro.ResourceID)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thay thế NULL bằng 0 trong truy vấn máy chủ SQL

  2. Chuyển đổi float thành varchar trong SQL Server mà không có ký hiệu khoa học

  3. Nhóm luôn sẵn sàng của SQL Server:Cài đặt và cấu hình, Phần 2

  4. Chọn truy vấn ánh xạ SQL

  5. DATEADD (MONTH, DATEDIFF (MONTH, 0, GETDATE ()), 0) Ai đó có thể giải thích cho tôi điều này không