Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Bảng SQL và trích xuất dữ liệu

Điều này sẽ nhận được kết quả bạn muốn.

;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

Tuy nhiên, có một số vấn đề với lược đồ và các tham số truy vấn chung:

1) Các cột đều là varchars. Điều này rất kém hiệu quả vì tất cả chúng đều cần được chuyển sang kiểu dữ liệu thích hợp để có được kết quả bạn mong muốn. Sử dụng datetime, int, float, v.v. (Tôi đã sử dụng CTE để xóa truy vấn theo đề xuất của @ Jeroen-Mostert)

2) Khi bảng lớn hơn, truy vấn này sẽ bắt đầu hoạt động rất kém vì vị từ được sử dụng (dấu thời gian 10 giây) không được lập chỉ mục đúng cách.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bao gồm các tháng bị thiếu trong truy vấn Nhóm Theo

  2. Không thể mở cơ sở dữ liệu vì nó là phiên bản 782. Máy chủ này hỗ trợ phiên bản 706 trở về trước. Đường dẫn hạ cấp không được hỗ trợ

  3. Khi nào tôi cần sử dụng Khối bắt đầu / Kết thúc và từ khóa Go trong SQL Server?

  4. Hiệu suất SQL Server 2008 trên cột địa lý vô hiệu với chỉ mục không gian

  5. Làm cách nào để kết xuất tất cả hình ảnh của chúng tôi từ trường VARBINARY (MAX) trong SQL Server 2008 vào hệ thống tệp?