Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Perbedaan antara tanggal dalam dua baris berturut-turut

Untuk PostgreSQL, saya rasa Anda menginginkan lag fungsi jendela untuk membandingkan baris; itu akan jauh lebih efisien daripada self-join dan filter. Ini tidak akan bekerja dengan MySQL, karena tampaknya masih tidak mendukung fungsi jendela standar SQL:2003; lihat di bawah.

Untuk menemukan hanya dua yang terendah, Anda dapat menggunakan dense_rank fungsi jendela di atas ticketid , lalu filter hasil untuk mengembalikan hanya baris di mana dense_rank() = 2 , yaitu baris dengan stempel waktu kedua-dari-terendah, di mana lag() akan menghasilkan baris dengan stempel waktu terendah.

Lihat SQLFiddle ini yang menunjukkan contoh DDL dan keluaran.

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;

Saya telah menggunakan ticketdate sebagai nama kolom tanggal karena date adalah nama yang buruk untuk sebuah kolom (ini adalah nama tipe data) dan tidak boleh digunakan; itu harus dikutip ganda dalam banyak situasi untuk bekerja.

Pendekatan portabel mungkin adalah self-join yang telah diposting orang lain. Pendekatan fungsi jendela di atas mungkin bekerja di Oracle juga, tetapi tampaknya tidak di MySQL. Sejauh yang saya tahu itu tidak mendukung fungsi jendela SQL:2003.

Definisi skema akan bekerja dengan MySQL jika Anda SET sql_mode = 'ANSI' dan gunakan timestamp bukannya timestamp with time zone . Tampaknya fungsi jendela tidak; MySQL tersedak pada OVER ayat. Lihat SQLFiddle ini .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hibernate:diri bergabung kebingungan?

  2. Struktur &Permintaan Sql Sistem Persahabatan

  3. iPhone:Menghubungkan ke database melalui Internet?

  4. masalah seperti mysql pada kecocokan parsial

  5. bagaimana cara menggabungkan dua kolom menjadi satu dengan nama kolom yang ada di mysql?