1

これは私のテーブルです。MAX (id) それぞれの を取得する必要がありますstatus_id.

id      status_id
10          1
11          1
12          2
13          2
14          2
15          4
16          4

したがって、私はこのSQLクエリを使用します。これは正しく機能し、すべての最大IDを取得します。

select status_id, max(id) as max FROM `table` 
where status_id in (1,2,3,4) group by status_id

この SQL コマンドは、while を使用して 3 つの MAX ID をフェッチします。

11、14、16....

ご覧のとおり、 3rd に適した ID はありませんstatus_id。3rd に適切な ID がない場合はstatus_id、0 としてマークします。だから私はSQLがこれらの結果をもたらすことを望みます:

11、14、0、16

4

2 に答える 2

4

ID基本的に必要なすべての を持ち、それに対して左結合を持つサブクエリを作成できます。

SELECT  a.status_ID,
        IFNULL(MAX(b.id), 0) maxVal
FROM    
        (
            SELECT 1 status_ID UNION ALL 
            SELECT 2 UNION ALL
            SELECT 3 UNION ALL
            SELECT 4 
        ) a
        LEFT JOIN `table` b ON a.status_id = b.status_id
GROUP   BY a.status_id
于 2013-09-12T06:36:06.437 に答える
0

すべての ID と 0 の stats_id 値を含む一時的なダミー テーブルと結合できます。

SELECT dummy.status_id, COALESCE(MAX(id), 0) AS max
FROM (
        SELECT 1 status_id
  UNION SELECT 2 status_id
  UNION SELECT 3 status_id
  UNION SELECT 4 status_id
) dummy
LEFT JOIN `table` 
ON dummy.status_id = table.status_id
GROUP BY dummy.status_id

しかし、これはスケーリングせず、メンテナンスの悪夢です (新しい status_id が表示された場合に備えて、ダミー選択を変更する必要があります)。すべての status_id を含むテーブルがある場合は、ダミー選択をそのテーブルに置き換えます。

于 2013-09-12T06:36:32.593 に答える