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.)