sql >> Database >  >> RDS >> Mysql

Maak een query om het aantal onvoltooide oproepen te krijgen

Hier is nog een methode die werkt zonder gecorreleerde subquery's of vensterfuncties:

Voor elke rij w1 , probeer een andere rij te vinden w2 met dezelfde call_id en een 0 om aan te geven dat de oproep is voltooid. Met behulp van een LEFT OUTER JOIN kunnen we testen op gevallen waarin geen w2 rij bestaat voor een bepaalde call_id.

Doe dan nog een join naar een hypothetische rij w3 met dezelfde call_id en een kleinere ast_num_curr waarde. Nogmaals, met behulp van outer join kunnen we controleren of zo'n rij niet bestaat. Dit betekent w1 moet de minste waarde hebben voor ast num voor die call_id.

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;

Uitgang:

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

Om de tellingen per queue_num_curr te krijgen, wikkelt u de bovenstaande query in een subquery met afgeleide tabellen en voert u de telling uit in de buitenste query:

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;

Uitgang:

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


  1. Gegevens bewaren in een gedockte postgres-database met behulp van volumes

  2. mysqldump met meerdere tabellen met of zonder waar-clausule

  3. NoClassDefFoundError krijgen tijdens het gebruik van Proguard en SQLcipher in Android

  4. Back-up/herstel van SQL Server versus loskoppelen/bijvoegen