2

レポートを作成するには、すべての顧客の最後の取引状況に関する情報を選択する必要があります。今まで、これは私が得たものです:

SELECT c.firstname, c.lastname, d.product_name, o.payment, s.name, h.date_add
FROM ps_orders o
INNER JOIN ps_order_detail d ON d.id_order = o.id_order
INNER JOIN ps_customer c ON c.id_customer = o.id_customer
INNER JOIN ps_order_history h ON o.id_order = h.id_order
INNER JOIN ps_order_state_lang s ON s.id_order_state = h.id_order_state
WHERE s.id_lang =6
GROUP BY c.id_customer
HAVING MAX(h.date_add)

顧客ごとに、このクエリは、最後の日付が必要なときに最初の日付 (フィールドh.date_add ) を選択しています。MySQL がHAVINGを無視しているようです。

副選択をしようとしましたが、うまくいきません。

答えてくれてありがとう。

4

2 に答える 2

3

最後の日付を取得するには、次のように参加する必要があります。

SELECT c.firstname, c.lastname, d.product_name, o.payment, s.name, h.date_add
FROM ps_orders o
INNER JOIN ps_order_detail d ON d.id_order = o.id_order
INNER JOIN ps_customer c ON c.id_customer = o.id_customer
INNER JOIN ps_order_history h ON o.id_order = h.id_order
INNER JOIN ps_order_state_lang s ON s.id_order_state = h.id_order_state
inner join (select o.id_customer, max(oh.date_add) as maxdate from ps_order_history h join ps_order o on h.id_order = o.id_order group by o.id_customer) omax on omax.id_customer = o.id_customer and o.date_add = omax.maxdate
WHERE s.id_lang =6
GROUP BY c.id_customer

having 句は最大の日付を計算し、それが 0 に等しくない場合 (ほとんどの場合) に成功します。

于 2013-04-02T13:11:09.647 に答える