Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Mencetak nilai saat ini dan nilai sebelumnya antara rentang tanggal

Sesuatu seperti berikut ini akan berfungsi:

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

Ini akan mengembalikan paling banyak dua baris. Tidak jelas apakah Anda menggunakan kolom tipe data Tanggal dan Waktu, atau jika Anda benar-benar menggunakan kata-kata yang dicadangkan sebagai nama kolom, jadi Anda harus repot dengan itu. (Saya meninggalkan Waktu, tetapi Anda dapat dengan mudah menambahkannya ke berbagai urutan dan pemfilteran.)

Mengingat kriteria yang direvisi, ini menjadi sedikit lebih rumit, karena penyertaan atau pengecualian suatu baris bergantung pada nilai yang dikembalikan di baris yang berbeda. Di sini, baris "kedua", jika ada dua baris atau lebih, dimasukkan hanya jika baris "pertama" sama dengan nilai tertentu. Cara standar untuk melakukannya adalah dengan mengkueri data untuk mendapatkan nilai maksimal, lalu mengkuerinya lagi sambil mereferensikan hasil set pertama.

Namun, Anda dapat melakukan banyak hal gila dengan row_number. Kerjakan ini:

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

Anda harus menyelesaikan masalah tanggal/waktu, karena ini hanya berfungsi pada tanggal.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Mengekspor data utf-8 dari sql server 2008 ke excel

  2. Kembalikan Nama Workstation Saat Ini yang Terhubung ke SQL Server (T-SQL)

  3. Cara Menonaktifkan Batasan Kunci Asing di SQL Server (Contoh T-SQL)

  4. Hapus simpul xml dari kolom tabel SQL Server 2008 r2 berdasarkan nilai atribut

  5. Menyisipkan Beberapa Baris di Sybase ASE