Saya memiliki tabel data (db adalah MSSQL):
ID OrderNO PartCode Quantity DateEntered
417 2144 44917 100 18-08-11
418 7235 11762 5 18-08-11
419 9999 60657 100 18-08-11
420 9999 60657 90 19-08-11
Saya ingin membuat kueri yang mengembalikan OrderNO, PartCode, dan Kuantitas, tetapi hanya untuk pesanan terdaftar terakhir.
Dari tabel contoh saya ingin mendapatkan kembali info berikut:
OrderNO PartCode Quantity
2144 44917 100
7235 11762 5
9999 60657 90
Perhatikan bahwa hanya satu baris yang dikembalikan untuk pesanan 9999.
Terima kasih!
sql-server
GEMI
sumber
sumber
MAX(DATE)
mengembalikan satu baris untuk pesanan 9999?Jawaban:
Jika
rownumber() over(...)
tersedia untuk Anda ....sumber
Cara terbaik adalah Mikael Eriksson
ROW_NUMBER()
tersedia untuk Anda.Terbaik berikutnya adalah bergabung dalam kueri, sesuai jawaban Cularis.
Alternatifnya, cara yang paling sederhana dan langsung adalah sub-kueri berkorelasi di klausa WHERE.
Atau...
sumber
Ini adalah kueri tercepat dari semua kueri yang diberikan di atas. Biaya permintaan masuk pada 0,0070668.
Jawaban pilihan di atas, oleh Mikael Eriksson, memiliki biaya kueri 0,0146625
Anda mungkin tidak peduli dengan kinerja untuk sampel sekecil itu, tetapi dalam kueri besar, semuanya bertambah.
sumber
Kueri dalam memilih semua
OrderNo
dengan tanggal maksimumnya. Untuk mendapatkan kolom lain pada tabel, Anda dapat menggabungkannya diOrderNo
danMaxDate
.sumber
Untuk MySql Anda dapat melakukan sesuatu seperti berikut:
sumber
{ }
) pada bilah alat editor untuk memformat dan menyorotnya dengan baik!Dan Anda juga dapat menggunakan pernyataan pilih itu sebagai kueri penggabung kiri ... Contoh:
Semoga ini membantu seseorang yang mencari ini :)
sumber
rownumber () over (...) berfungsi tetapi saya tidak menyukai solusi ini karena 2 alasan. - Fungsi ini tidak tersedia ketika Anda menggunakan versi SQL yang lebih lama seperti SQL2000 - Ketergantungan pada fungsi dan tidak benar-benar dapat dibaca.
Solusi lainnya adalah:
sumber
Jika Anda telah mengindeks ID dan OrderNo, Anda dapat menggunakan IN: (Saya benci kesederhanaan perdagangan karena ketidakjelasan, hanya untuk menghemat beberapa siklus):
sumber
Cobalah untuk menghindari DALAM penggunaan JOIN
sumber
Ini bekerja untuk saya dengan sangat baik.
sumber
Ini berhasil untuk saya. gunakan MAX (CONVERT (date, ReportDate)) untuk memastikan Anda memiliki nilai tanggal
sumber