sql >> Database >  >> RDS >> Mysql

Som Meerdere rijen Datumverschil Mysql

Zoek voor elke rij een eerste rij met een hogere (later) LogDate. Als de snelheid in deze rij minder dan 10 is, tel dan het datumverschil tussen de datum van deze rij en de datum van de volgende rij, anders zet u 0.

Een zoekopdracht die een lijst geeft van de waarden die op deze manier worden geteld, zou er als volgt uit moeten zien:

SELECT ( SELECT IF( c1.speed <10, unix_timestamp( c2.LogDate ) - unix_timestamp( c1.logdate ) , 0 )
           FROM car_log c2
           WHERE c2.LogDate > c1.LogDate
           LIMIT 1
       ) AS seconds_below_10
FROM car_log c1

Nu is het gewoon een kwestie van samenvatten:

SELECT sum( seconds_below_10) FROM 
( SELECT ( SELECT IF( c1.speed <10, unix_timestamp( c2.LogDate ) - unix_timestamp( c1.logdate ) , 0 )
           FROM car_log c2
           WHERE c2.LogDate > c1.LogDate
           LIMIT 1
          ) AS seconds_below_10
  FROM car_log c1 ) seconds_between_logs

Update na opmerking over het toevoegen van CarId:

Als je meer dan 1 auto hebt, moet je nog een WHERE-voorwaarde toevoegen binnen de afhankelijke subquery (we willen het volgende logboek voor die exacte auto, niet zomaar een volgend logboek) en de hele rijen groeperen op CarId, waarbij mogelijk de genoemde CarId wordt toegevoegd aan de selectie om te tonen het ook.

SELECT sbl.carId, sum( sbl.seconds_below_10 ) as `seconds_with_speed_less_than_10` FROM
( SELECT c1.carId, 
         ( SELECT IF( c1.speed <10, unix_timestamp( c2.LogDate ) - unix_timestamp( c1.logdate ) , 0 )
           FROM car_log c2
           WHERE c2.LogDate > c1.LogDate AND c2.carId = c1.carId
           LIMIT 1 ) AS seconds_below_10
  FROM car_log c1 ) sbl
GROUP BY sbl.carId

Zie een voorbeeld op Sqlfiddle .



  1. Wat is GEEN logische operator in SQL Server - SQL Server / TSQL-zelfstudie, deel 121

  2. Selecteer alle records die niet aan bepaalde voorwaarden voldoen in een samengevoegde tabel

  3. Hoe werkt bevat() in PL-SQL?

  4. MySQL Selecteer waar max. datum en max. tijd