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

Simulasikan fungsi lag di MySQL

Ini adalah peretasan MySQL favorit saya.

Ini adalah bagaimana Anda meniru fungsi lag:

SET @quot=-1;
select time,company,@quot lag_quote, @quot:=quote curr_quote
  from stocks order by company,time;
  • lag_quote memegang nilai kutipan baris sebelumnya. Untuk baris pertama @quot adalah -1.
  • curr_quote memegang nilai kutipan baris saat ini.

Catatan:

  1. order by klausa penting di sini seperti halnya dalam fungsi jendela biasa.
  2. Anda mungkin juga ingin menggunakan jeda untuk company hanya untuk memastikan bahwa Anda menghitung perbedaan dalam tanda kutip dari company yang sama .
  3. Anda juga dapat mengimplementasikan penghitung baris dengan cara yang sama @cnt:[email protected]+1

Hal yang menyenangkan tentang skema ini adalah komputasinya sangat ramping dibandingkan dengan beberapa pendekatan lain seperti menggunakan fungsi agregat, prosedur tersimpan, atau memproses data di server aplikasi.

EDIT:

Sekarang sampai pada pertanyaan Anda untuk mendapatkan hasil dalam format yang Anda sebutkan:

SET @quot=0,@latest=0,company='';
select B.* from (
select A.time,A.change,IF(@comp<>A.company,1,0) as LATEST,@comp:=A.company as company from (
select time,company,[email protected] as change, @quot:=quote curr_quote
from stocks order by company,time) A
order by company,time desc) B where B.LATEST=1;

Bersarang tidak saling terkait sehingga tidak seburuk (secara komputasi) seperti yang terlihat (secara sintaksis) :)

Beri tahu saya jika Anda memerlukan bantuan untuk 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. Menghubungkan Aplikasi ODBC ke MySQL

  2. Masukkan Data ke dalam Database MySQL

  3. Hapus dari dua tabel dalam satu kueri

  4. Buat Diagram Basis Data di MySQL Workbench

  5. Pilih baris terakhir di MySQL