0

重複の可能性:
MySQLはグループの最新レコードを取得します

異なるjobTypeがない限り、「address1」フィールドに同じ情報を持つすべてのレコードをグループ化するクエリがあります。

SELECT * 
FROM   jobs 
WHERE  client_id = '".$id."' 
       AND status = '3' 
GROUP  BY CASE 
            WHEN jobType IN ( '0', '3', '6' ) THEN '0' 
            ELSE jobType 
          end, 
          address1 
ORDER  BY Max(id) ASC 

私が遭遇している問題は、クエリが常にグループの最初のインスタンスをプルすることです。グループ内の最新のインスタンスをプルするために必要です。ORDER BYのバリエーションをいくつか試しましたが、うまくいかなかったようです。

どんな助けでも大歓迎です。

4

1 に答える 1

1

グループごとの最大値が必要です:

SELECT jobs.*
FROM   jobs NATURAL JOIN (
  SELECT   MAX(id) id
  FROM     jobs
  WHERE    client_id = :id AND status = '3'
  GROUP BY CASE
             WHEN jobType IN ('0','3','6') THEN '0'
             ELSE jobType
           END,
           address1
) t

ただし、これはインデックスにあまり適していません。式の結果を含む列を作成することをお勧めしますCASE(次に、その結​​果にインデックスを付けます)。

于 2012-10-30T22:55:07.353 に答える