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

Różnica między datami w dwóch kolejnych wierszach

W przypadku PostgreSQL myślę, że chcesz lag funkcja okna porównać wiersze; będzie to znacznie wydajniejsze niż samodzielne łączenie i filtrowanie. To nie zadziała z MySQL, ponieważ nadal nie obsługuje standardowych funkcji okna SQL:2003; patrz poniżej.

Aby znaleźć tylko dwa najniższe, możesz użyć dense_rank funkcja okna nad ticketid , a następnie przefiltruj wyniki, aby zwrócić tylko wiersze, w których dense_rank() = 2 , czyli wiersz z drugim od najniższego znacznika czasu, gdzie lag() wygeneruje wiersz z najniższym znacznikiem czasu.

Zobacz ten SQLFiddle który pokazuje przykładowe DDL i dane wyjściowe.

SELECT ticketid, extract(epoch from tdiff) FROM (
  SELECT
      ticketid,
      ticketdate - lag(ticketdate) OVER (PARTITION BY ticketid ORDER BY ticketdate) AS tdiff,
      dense_rank() OVER (PARTITION BY ticketid ORDER BY ticketdate) AS rank
  FROM Table1
  ORDER BY ticketid) x
WHERE rank = 2;

Użyłem ticketdate jako nazwę kolumny daty, ponieważ date to okropna nazwa kolumny (jest to nazwa typu danych) i nigdy nie powinna być używana; w wielu sytuacjach musi być cytowany podwójnie.

Podejście przenośne to prawdopodobnie samoprzyłączanie się, które opublikowali inni. Powyższe podejście do funkcji okna prawdopodobnie działa również w Oracle, ale wydaje się, że nie w MySQL. O ile wiem, nie obsługuje funkcji okna SQL:2003.

Definicja schematu będzie działać z MySQL, jeśli SET sql_mode = 'ANSI' i użyj timestamp zamiast timestamp with time zone . Wygląda na to, że funkcje okien nie działają; MySQL dławi się na OVER klauzula. Zobacz ten SQLFiddle .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Odwoływanie się do zewnętrznych tabel zapytania w podzapytaniu

  2. Jak sprawdzić, czy pole jest puste lub puste w MySQL?

  3. MySQL - Jak zliczyć wszystkie wiersze na tabelę w jednym zapytaniu

  4. Debugowanie wyzwalaczy MySQL

  5. MySQL:wybierz datę w poniedziałek w bieżącym tygodniu