Tôi có bảng MS SQL chứa dữ liệu cổ phiếu với các cột sau: Id, Symbol, Date, Open, High, Low, Close
.Cách tự tham gia bảng theo cách mọi bản ghi được kết hợp với bản ghi "trước đó"?
Tôi muốn tự tham gia bảng, vì vậy tôi có thể nhận được thay đổi hàng ngày% cho Close
.
Tôi phải tạo một truy vấn sẽ tự động tham gia bảng theo cách mà mỗi bản ghi cũng chứa dữ liệu từ phiên trước đó (lưu ý rằng tôi không thể sử dụng ngày hôm qua).
Ý tưởng của tôi là để làm một cái gì đó như thế này:
select * from quotes t1
inner join quotes t2
on t1.symbol = t2.symbol and
t2.date = (select max(date) from quotes where symbol = t1.symbol and date < t1.date)
Tuy nhiên tôi không biết nếu đó là đúng/Cách nhanh nhất. Tôi nên tính đến điều gì khi suy nghĩ về hiệu suất? (Ví dụ: việc đưa chỉ mục UNIQUE vào cặp (Ký hiệu, Ngày) cải thiện hiệu suất?)
Sẽ có khoảng 100.000 bản ghi mới mỗi năm trong bảng này. Tôi đang sử dụng MS SQL Server 2008
Bạn có thể hiển thị một số dữ liệu mẫu và ném nó trong một fiddle? – Kermit
(1) Sử dụng phép nối trái thay vì nối bên trong, để xử lý các sản phẩm mới. Sau đó, bạn có một truy vấn chung, mà luôn luôn có thể được lọc để loại trừ các bản ghi với một NULL Right-Hand-Side. –
@PieterGeerkens: Tôi chỉ quan tâm đến các hàng không có giá trị NULL, vì vậy INNER JOIN có mục đích. LEFT JOIN có cải thiện hiệu suất không? Tôi không nghĩ vậy ... –