So vermeiden Sie die Gruppierung nach bestimmten Spalten
P粉667649253
P粉667649253 2023-07-25 14:08:22
0
1
480
<p>Ich habe eine Datentabelle zu Terminen und wenn die zugehörigen Daten aktualisiert werden, kann jeder Termin mehrere Datenzeilen haben. Ich möchte den letzten Datensatz jedes Termins auswählen, um den neuesten Schnappschuss jedes Termins zu erhalten. </p><p>Im angehängten Code bin ich gezwungen, nach close_pallets und close_units zu gruppieren, was sich auf das auswirkt, was ich sehe (d. h. mehrere zurückgegebene Zeilen pro Termin). Ich möchte nur nach a.appointment_id gruppieren, damit ich eine Zeile pro Termin erhalte. Was soll ich tun?</p><p><br /></p> <pre class="brush:php;toolbar:false;">SELECT MAX(appointment_record_version_number), termine_id, date_pallets AS close_pallets, date_units AS close_units AUS b.dh WO last_updated_datetime ZWISCHEN „01.06.2023“ UND „30.06.2023“ UND Warehouse_id = 'xxx' GRUPPIERE NACH termine_id, close_pallets, close_units</pre> <p><br /></p>
P粉667649253
P粉667649253

Antworte allen(1)
P粉744691205

您将需要使用子查询来实现这一点。实际上,您需要获取每个约会ID的最大记录版本:

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'

你也可以使用JOIN语句来选择最大值,有时会更快:

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';

根据您的用例,特别是如果您的数据库很大,您可以使用其他子查询或索引来进一步优化请求,但它已经相当快了。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage