Tôi muốn tạo chế độ xem trong SQLite trong đó một trường trong một hàng phụ thuộc vào giá trị của trường trong hàng trước đó. Tôi có thể làm điều này trong Oracle bằng cách sử dụng chức năng phân tích LAG
, nhưng không chắc chắn làm thế nào để đi về nó trong SQLite.Tạo chế độ xem SQLite trong đó hàng phụ thuộc vào hàng trước
Ví dụ, nếu bàn của tôi trông giống như:
ITEM DAY PRICE
apple 2011-01-07 1.25
orange 2011-01-02 1.00
apple 2011-01-01 1.00
orange 2011-01-03 2.00
apple 2011-01-08 1.00
apple 2011-01-10 1.50
Tôi muốn quan điểm của tôi trông giống như, với WHERE item = 'apple'
:
DAY PRICE CHANGE
2011-01-01 1.00 (null)
2011-01-07 1.25 0.25
2011-01-08 2.00 0.75
2011-01-10 1.50 -0.50
Edit:
Tương đương của truy vấn Tôi đang tìm kiếm sẽ tìm trong Oracle một cái gì đó như (chưa thử này, nhưng tôi nghĩ rằng điều này là chính xác):
SELECT day, price,
price - LAG(price, 1) OVER (ORDER BY day) AS change
FROM mytable
WHERE item = 'apple'
Xác định "trước". Có vẻ như bản ghi được phép duy nhất cho ngày một ngày trước bản ghi hiện tại. Điều đó luôn đúng không? –
No. Tôi đã mở rộng ví dụ. Bởi "trước" tôi về cơ bản có nghĩa là hàng hàng trước khi một trong những câu hỏi, một khi họ đang đặt hàng. – eaolson
Xác định "đã đặt hàng". Về cơ bản, vấn đề là cơ sở dữ liệu SQL (theo định nghĩa) không có khái niệm về thứ tự hàng ngoài những gì bạn chỉ định cụ thể, theo tên cột, khi truy xuất. Bạn có thể nhận được kết quả mong muốn, nhưng bạn sẽ phải lấy "hàng trước" thông qua đại số quan hệ trong định nghĩa khung nhìn của bạn và, để làm điều đó, bạn cần phải rõ ràng về cách bạn định nghĩa "trước" ở đồng bằng ngôn ngữ. –