sql >> データベース >  >> RDS >> Mysql

未完了の呼び出しの数を取得するクエリを作成します

    相関サブクエリまたはウィンドウ関数なしで機能する別の方法は次のとおりです。

    各行についてw1 、別の行を見つけてみてくださいw2 同じcall_idと0は、呼び出しが完了したことを示します。 LEFT OUTER JOINを使用して、w2がない場合をテストできます。 指定されたcall_idに行が存在します。

    次に、架空の行w3に別の結合を行います 同じcall_idとより小さいast_num_curr値を使用します。ここでも、外部結合を使用して、そのような行が存在しないことを確認できます。これはw1を意味します そのcall_idのastnumの値は最小である必要があります。

    SELECT w1.call_id, w1.queue_num_curr
    FROM waiter_log AS w1
    LEFT OUTER JOIN waiter_log AS w2
      ON w1.call_id = w2.call_id AND w2.proceed_wait = 0 
    LEFT OUTER JOIN waiter_log AS w3
      ON w1.call_id = w3.call_id AND w1.ast_num_curr > w3.ast_num_curr
    WHERE w2.call_id IS NULL AND w3.call_id IS NULL;
    

    出力:

    +---------+----------------+
    | call_id | queue_num_curr |
    +---------+----------------+
    | 49c43ad |           9004 |
    | asdf231 |           9010 |
    | rete125 |           9010 |
    +---------+----------------+
    

    queue_num_currごとのカウントを取得するには、上記のクエリを派生テーブルサブクエリでラップし、外部クエリでカウントを実行します。

    SELECT queue_num_curr, COUNT(*) AS count
    FROM (
      SELECT w1.call_id, w1.queue_num_curr
      FROM waiter_log AS w1
      LEFT OUTER JOIN waiter_log AS w2
        ON w1.call_id = w2.call_id AND w2.proceed_wait = 0
      LEFT OUTER JOIN waiter_log AS w3
        ON w1.call_id = w3.call_id AND w1.ast_num_curr > w3.ast_num_curr
      WHERE w2.call_id IS NULL AND w3.call_id IS NULL
    ) AS t
    GROUP BY queue_num_curr;
    

    出力:

    +----------------+-------+
    | queue_num_curr | count |
    +----------------+-------+
    |           9004 |     1 |
    |           9010 |     2 |
    +----------------+-------+
    


    1. DBAとしてのあなたの価値を財務幹部に明確に伝える方法

    2. InnoDBテーブルを修復するにはどうすればよいですか?

    3. Android SQLite Journalの動作が変更されましたか?

    4. PHPで次と前のリンクを構築する方法は?