Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Trudność ze zmienną długością opóźnienia

Zamiast porównywać z datą anulowania w poprzednim wierszu, musisz porównać z ostatnią datą anulowania we wszystkich poprzednich wierszach. Standardowy SQL ma opcję IGNORE NULLS, aby to osiągnąć, ale MySQL jej nie obsługuje. Na szczęście w twoim przypadku można to przepisać za pomocą skumulowanego maksimum:

select t.*,
       datediff(start, prev_cancelled) as num_days_since_cancel
from (select dt.*,
             max(cancelled) over -- latest date per id
             (partition by id 
              order by start
              rows between unbounded preceding and 1 preceding) as prev_cancelled
      from dt
     ) t
-- remove negative duration
where datediff(start, prev_cancelled) >= 0;

Zobacz skrzypce



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie można nawiązać połączenia JDBC z MySQL (przy użyciu Javy, IntelliJ i Linux)

  2. Zapytanie MySQL:jak poprawnie zidentyfikować i ponownie przetłumaczyć wartości wyników oddzielone przecinkami na oryginalne pojęcia za pomocą CONCAT_WS i COALESCE

  3. Zduplikowana nazwa kolumny na JOIN w mysql

  4. wiele zapytań w tej samej tabeli, ale w różnych kolumnach mysql

  5. Doctrine 2 dodaje nowe pole, które automatycznie generuje wartości sekwencji