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

SQL Query untuk mendapatkan harga terbaru

Saya pikir satu-satunya solusi dengan struktur tabel Anda adalah bekerja dengan subquery:

SELECT *
   FROM Thing
   WHERE ID IN (SELECT max(ID) FROM Thing 
                   WHERE ThingID IN (1,2,3,4)
                   GROUP BY ThingID)

(Diberikan ID tertinggi juga berarti harga terbaru)

Namun saya sarankan Anda menambahkan kolom "IsCurrent" yaitu 0 jika bukan harga terbaru atau 1 jika harga terbaru. Ini akan menambah kemungkinan risiko data yang tidak konsisten, tetapi akan sangat mempercepat seluruh proses ketika tabel menjadi lebih besar (jika ada dalam indeks). Maka yang perlu Anda lakukan adalah...

SELECT *
   FROM Thing
   WHERE ThingID IN (1,2,3,4)
     AND IsCurrent = 1

PERBARUI

Oke, Markus memperbarui pertanyaan untuk menunjukkan bahwa ID adalah uniqueid, bukan int. Itu membuat penulisan kueri menjadi lebih rumit.

SELECT T.* 
   FROM Thing T
   JOIN (SELECT ThingID, max(PriceDateTime)
            WHERE ThingID IN (1,2,3,4)
            GROUP BY ThingID) X ON X.ThingID = T.ThingID 
                                AND X.PriceDateTime = T.PriceDateTime
   WHERE ThingID IN (1,2,3,4)

Saya benar-benar menyarankan menggunakan kolom "IsCurrent" atau menggunakan saran lain yang ditemukan dalam jawaban dan menggunakan tabel "harga saat ini" dan tabel "riwayat harga" terpisah (yang pada akhirnya akan menjadi yang tercepat, karena mempertahankan harga meja itu sendiri kecil).

(Saya tahu ThingID di bagian bawah berlebihan. Coba saja jika lebih cepat dengan atau tanpa "WHERE". Tidak yakin versi mana yang akan lebih cepat setelah pengoptimal bekerja.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menghapus dari beberapa tabel menggunakan INNER JOIN di SQL server

  2. Berurusan dengan perubahan Database antara cabang versi/rollback di ASP.NET

  3. Apa yang mengunci | sumber daya buffer komunikasi berarti?

  4. Jatuhkan semua tabel yang namanya dimulai dengan string tertentu

  5. Cara Menonaktifkan Batasan CHECK di SQL Server (Contoh T-SQL)