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

In giá trị hiện tại và giá trị trước đó giữa phạm vi ngày

Một cái gì đó như sau sẽ hoạt động:

SELECT ID, Date, Time, Status
 from (select ID, Date, Time, Status, row_number() over (order by Date) Ranking
        from MyTable
        where ID = @SearchId
         and Date <= @SearchDate) xx
 where Ranking < 3
 order by Date, Time

Điều này sẽ trả về nhiều nhất là hai hàng. Nó không rõ ràng nếu bạn đang sử dụng các cột được định kiểu dữ liệu Ngày và Giờ, hay nếu bạn thực sự đang sử dụng các từ dành riêng làm tên cột, vì vậy bạn sẽ phải phiền phức với điều đó. (Tôi đã bỏ qua Thời gian, nhưng bạn có thể dễ dàng thêm nó vào các thử thách và chuỗi lọc khác nhau.)

Với các tiêu chí đã sửa đổi, nó sẽ phức tạp hơn một chút, vì việc bao gồm hoặc loại trừ một hàng phụ thuộc vào giá trị được trả về trong một hàng khác. Ở đây, hàng "thứ hai", nếu có hai hoặc nhiều hàng, chỉ được đưa vào nếu hàng "đầu tiên" bằng một giá trị cụ thể. Cách tiêu chuẩn để thực hiện việc này là truy vấn dữ liệu để nhận giá trị tối đa, sau đó truy vấn lại nó trong khi tham chiếu kết quả của tập hợp đầu tiên.

Tuy nhiên, bạn có thể làm rất nhiều điều rắc rối với row_number. Làm việc này:

SELECT ID, Date, Time, Status
 from (select
          ID, Date, Time, Status
         ,row_number() over (partition by case when Date = @SearchDate then 0 else 1 end
                             order by     case when Date = @SearchDate then 0 else 1 end
                                         ,Date) Ranking
        from MyTable
        where ID = @SearchId
         and Date <= @SearchDate) xx
 where Ranking = 1
 order by Date, Time

Bạn sẽ phải giải quyết vấn đề ngày / giờ, vì điều này chỉ hoạt động với ngày tháng.



  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ể truy cập các bảng tạm thời từ bên trong một hàm

  2. Chuyển đổi ‘datetimeoffset’ thành ‘datetime2’ trong SQL Server (Ví dụ T-SQL)

  3. Làm cách nào để CẬP NHẬT từ một CHỌN trong SQL Server?

  4. Cập nhật trường XML không có văn bản trong T-SQL

  5. Hướng dẫn sử dụng SQL Server - Mọi thứ bạn cần để thành thạo Transact-SQL