Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Cara mendapatkan tanggal terdekat di Oracle sql

Anda hanya perlu menggunakan satu gabungan Cartesian untuk menyelesaikan masalah Anda tidak seperti solusi lain, yang menggunakan banyak. Saya berasumsi waktu disimpan sebagai VARCHAR2. Jika disimpan sebagai tanggal maka Anda dapat menghapus fungsi TO_DATE. Jika disimpan sebagai tanggal (saya akan sangat menyarankan ini), Anda harus menghapus bagian tanggal

Saya membuatnya sedikit bertele-tele sehingga jelas apa yang terjadi.

select *
  from ( select id, tm
              , rank() over ( partition by t2id order by difference asc ) as rnk
           from ( select t1.*, t2.id as t2id
                       , abs( to_date(t1.tm, 'hh24:mi:ss') 
                              - to_date(t2.tm, 'hh24:mi:ss')) as difference
                    from t1
                   cross join t2
                         ) a
                 )
 where rnk = 1

Pada dasarnya, ini menghasilkan perbedaan absolut antara setiap waktu di T1 dan T2 kemudian mengambil perbedaan terkecil dengan T2 ID; mengembalikan data dari T1.

Ini dia dalam format SQL Fiddle .

Format yang kurang cantik (tetapi lebih pendek) adalah:

select *
  from ( select t1.*
              , rank() over ( partition by t2.id 
                                  order by abs(to_date(t1.tm, 'hh24:mi:ss') 
                                            - to_date(t2.tm, 'hh24:mi:ss'))
                                  ) as rnk
           from t1
          cross join t2
                ) a
 where rnk = 1


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hilangkan duplikat menggunakan fungsi Oracle LISTAGG

  2. ORA-12505, TNS:pendengar saat ini tidak mengetahui SID yang diberikan di deskriptor koneksi

  3. Oracle PL/SQL:DBMS_SCHEDULER.CREATE_JOB Contoh

  4. FNDCPASS &AFPASSWD

  5. Apa sebenarnya parameter IN, OUT, IN OUT di PL/SQL?