0

MySQL クエリの作成についてサポートが必要です。これまでのところ、私のニーズに合う質問はないようです。

orderテーブルとテーブルがありorder_logます。order_log テーブルでは、注文のステータスが変更されるたびに記録を作成します。order_log テーブルから最新のステータス変更のリストを表示する必要があります。私が現在使用しているクエリは、2 つのテーブルで JOIN を実行し、order.status = order_log.status のすべてを取得します。

これに関する問題は、注文が同じステータスを複数回通過する場合があることです。それが発生すると、私のクエリはその注文とそのステータスの order_log テーブル内のすべてのエントリを取得しますが、最新のログのみが必要です。

order_log の日付エントリの最大値を取得するために新しい JOIN クエリを作成しようとしましたが、1 つのエントリしか返されません。これは私が持っているものです。

SELECT *
FROM order_status_log AS l
JOIN orders AS o ON ( l.order_id = o.id )
WHERE l.status = o.status
AND l.date = (
    SELECT MAX( date )
    FROM order_status_log l2
   JOIN orders AS o2 ON ( l2.order_id = o2.id )
) 

何か案は?

4

2 に答える 2

0

それには多くの方法があります。1 つは、各レコードの最新のエントリを取得する個別のサブクエリを用意することですorder_ID

サブクエリの結果は、元のテーブルと再び結合されますが、複数の条件がありorder_IDますdate

SELECT  a.*, b.*
FROM    `order` a
        INNER JOIN order_log b
            ON  a.id = b.order_ID
        INNER JOIN
        (
            SELECT order_ID, MAX(date) max_date
            FROM order_log
            GROUP BY order_ID
        ) c on b.order_ID = c.order_ID AND
                b.date = c.max_date
于 2013-01-17T03:32:12.430 に答える
0

それが役立つかもしれません。

select olg.column1,o.column2,max(olg.date) from --You can add other columns as well
order_status_log olg
join orders o
on olg.id = o.order_id
group by olg.column1,o.column2
于 2013-01-17T03:34:29.713 に答える