Bagaimana untuk mengelakkan pengumpulan pada lajur tertentu
P粉667649253
P粉667649253 2023-07-25 14:08:22
0
1
459
<p>Saya mempunyai jadual data tentang janji temu dan apabila data berkaitan dikemas kini, setiap janji temu boleh mempunyai berbilang baris data. Saya ingin memilih rekod terakhir setiap janji temu untuk mendapatkan gambar terkini setiap janji temu. </p><p>Dalam kod yang dilampirkan, saya terpaksa mengumpulkan mengikut close_pallets dan close_units, yang mempengaruhi perkara yang saya lihat (iaitu berbilang baris dikembalikan setiap janji temu). Saya mahu mengumpulkan hanya dengan a.appointment_id supaya saya mendapat satu baris setiap temu janji. Apakah yang perlu saya lakukan?</p><p><br /></p> <pre class="brush:php;toolbar:false;">SELECT MAX(nombor_versi_rekod_jawatan), appointment_id, appointment_pallets AS close_pallets, appointment_units AS close_units DARI b.dh DI MANA last_updated_datetime ANTARA '2023-06-01' DAN '2023-06-30' DAN warehouse_id = 'xxx' KUMPULAN OLEH appointment_id, close_pallets, close_units</pre> <p><br /></p>
P粉667649253
P粉667649253

membalas semua(1)
P粉744691205

Anda perlu menggunakan subkueri untuk mencapai ini. Sebenarnya, anda perlu mendapatkan versi rekod maksimum setiap ID janji temu:

SELECT
    appointment_record_version_number,
    appointment_id,
    appointment_pallets AS close_pallets,
    appointment_units AS close_units
FROM
    b.dh AS t1
WHERE
    t1.appointment_record_version_number = (
        SELECT
            MAX(appointment_record_version_number)
        FROM
            b.dh
        WHERE
            b.dh.data = t1.data
    )
    AND last_updated_datetime BETWEEN '2023-06-01' AND '2023-06-30'
    AND warehouse_id = 'xxx'

Anda juga boleh menggunakan pernyataan JOIN untuk memilih nilai maksimum, yang kadangkala lebih pantas:

SELECT
    t1.appointment_record_version_number,
    t1.appointment_id,
    t1.appointment_pallets AS close_pallets,
    t1.appointment_units AS close_units
FROM
    b.dh AS t1
LEFT JOIN b.dh AS t2 ON (
    t1.appointment_record_version_number = t2.appointment_record_version_number
    AND t1.appointment_id < t2.appointment_id
)
WHERE t2.appointment_record_version_number IS NULL
AND last_updated_datetime BETWEEN '2023-06-01' AND '2023-06-30'
AND warehouse_id = 'xxx';

Bergantung pada kes penggunaan anda, terutamanya jika pangkalan data anda besar, anda boleh menggunakan subkueri atau indeks tambahan untuk mengoptimumkan permintaan lagi, tetapi ia sudah cukup pantas.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan