Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Tabel SQL dan ekstraksi data

Ini akan mendapatkan hasil yang Anda inginkan.

;with cast_cte
as
(
  select [TRADE_ID], cast([TIMESTAMP] as datetime) timestamp, [SECURITY], [QUANTITY], cast([PRICE] as float) as price
  from tbProduct
)
select t1.trade_id, t2.trade_id, datediff(ms, t1.timestamp, t2.timestamp) as milliseconds_diff,
((t1.price - t2.price) / t1.price) * 100 as price_diff
from cast_cte t1
inner join cast_cte t2
on datediff(ms, t1.timestamp, t2.timestamp) between 0 and 10000
and t1.trade_id <> t2.trade_id
where ((t1.price - t2.price) / t1.price) * 100 > 10
or ((t1.price - t2.price) / t1.price) * 100 < -10

Namun, ada sejumlah masalah dengan skema dan parameter kueri umum:

1) Semua kolom adalah varchars. Ini sangat tidak efisien karena mereka semua harus dilemparkan ke tipe data yang sesuai untuk mendapatkan hasil yang Anda inginkan. Gunakan datetime, int, float dll. (Saya telah menggunakan CTE untuk membersihkan kueri sesuai saran @ Jeroen-Mostert)

2) Saat tabel semakin besar, kueri ini akan mulai berkinerja sangat buruk karena predikat yang digunakan (stempel waktu 10 detik) tidak diindeks dengan benar.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Basis data tidak dapat dibuka karena versi 851. Server ini mendukung versi 782 dan sebelumnya. Jalur penurunan versi tidak didukung

  2. SQL Server 2008 Buka Master Key error saat server fisik diganti

  3. Perbedaan antara dua tanggal dalam jumlah jam yang tepat dalam SQL

  4. Dapatkan Nilai Batas untuk Tabel yang Dipartisi di SQL Server (T-SQL)

  5. Buat Pekerjaan Agen SQL Server menggunakan T-SQL