Tôi có cơ sở dữ liệu SQLite mà tôi cần thực hiện như sau: Chỉ giữ lại các bản ghi N cuối cùng, được sắp xếp theo ngày. Làm thế nào để bạn làm điều đó?Chỉ giữ lại các bản ghi cuối cùng trong cơ sở dữ liệu SQLite, được sắp xếp theo ngày
Trả lời
Để xóa tất cả trừ 10 bản ghi mới nhất.
delete
from test
where id not in (
select id
from test
order by date desc
limit 10
)
Theo SQLite documentation:
Nếu SQLite được biên soạn với các tùy chọn thời gian biên dịch SQLITE_ENABLE_UPDATE_DELETE_LIMIT thì cú pháp của câu lệnh DELETE được mở rộng bằng cách thêm TRÌNH TỰ tùy chọn BY và LIMIT khoản.
(...)
Nếu câu lệnh DELETE có một mệnh đề ORDER BY, sau đó tất cả các hàng đó sẽ bị xóa trong sự vắng mặt của mệnh đề LIMIT đều được sắp xếp theo ORDER BY. M hàng đầu tiên, trong đó M là giá trị được tìm thấy bằng cách đánh giá biểu thức mệnh đề OFFSET, được bỏ qua và N sau, trong đó N là giá trị của biểu thức LIMIT, sẽ bị xóa. Nếu còn ít hơn N hàng sau khi lấy mệnh đề OFFSET, hoặc nếu mệnh đề LIMIT được đánh giá thành giá trị âm, thì tất cả các hàng còn lại sẽ bị xóa.
này sẽ cho phép bạn viết:
DELETE FROM table WHERE expr ORDER BY date DESC LIMIT -1 OFFSET 10
~ "Nếu còn ít hơn N hàng". -1 có ý nghĩa gì ở đây? –
@IgorGanapolsky Nhìn vào câu cuối cùng của đoạn trích dẫn: _if mệnh đề LIMIT được đánh giá thành giá trị âm, thì tất cả các hàng còn lại đều bị xóa_. –
Vì vậy, nếu có ít hơn 10 hàng trong bảng hoàn toàn, thì tất cả chúng sẽ bị xóa? –
để giữ chỉ 10 hồ sơ cuối cùng, suy nghĩ ngược.
Để xóa 10 hồ sơ cũ:
DELETE FROM Table_name
WHERE date in (SELECT date FROM Table_name ORDER BY Date Desc Limit -1
OFFSET (select count(*)-10 from Table_name));
Hãy cho tôi biết làm thế nào nó làm việc cho bạn!
Ngày có phải ở định dạng nhất định - như yyyy-mm-dd không? –
Giả sử bạn có một cột id
mà là một dãy số (AUTO INCREMENT
), bạn có thể sử dụng như sau:
DELETE FROM table_name
WHERE id < (
SELECT MIN(id)
FROM (SELECT id
FROM table_name
ORDER BY id DESC
LIMIT num_of_records_to_keep))
Truy vấn tương tự có thể được sử dụng khi sử dụng một cột timestamp (chỉ cần thay thế id
với timestamp của bạn cột)
- 1. SQLite: cơ sở dữ liệu chỉ đọc
- 2. giữ bảng nhật ký trong cơ sở dữ liệu sqlite?
- 3. Làm cách nào để sắp xếp lại các hàng trong cơ sở dữ liệu sql
- 4. Sắp xếp Bullets trong cơ sở dữ liệu
- 5. Nhận giá trị được chèn vào cuối cùng từ cơ sở dữ liệu sqlite Android
- 6. Cách sắp xếp/sắp xếp dữ liệu trong Riak?
- 7. Cập nhật các phiên bản cơ sở dữ liệu sqlite?
- 8. cách lấy số bản ghi cuối cùng sau khi chèn bản ghi vào cơ sở dữ liệu truy cập
- 9. Sắp xếp lại khung dữ liệu với các bản sao
- 10. Giữ cơ sở dữ liệu SQLite cùng khi nâng cấp và ứng dụng Android từ Lite để Pro phiên bản
- 11. PHP, MYSQL: Sắp xếp theo ngày nhưng ngày trống cuối cùng không phải trước tiên
- 12. Biểu diễn tốt nhất về danh sách được sắp xếp trong cơ sở dữ liệu?
- 13. Cách sắp xếp cột ENUM trong cơ sở dữ liệu MySQL?
- 14. Cơn ác mộng cơ sở dữ liệu di sản MySQL cuối cùng
- 15. Chọn `n` các bản ghi được chèn cuối cùng trong bảng - oracle
- 16. Chèn mảng trong cơ sở dữ liệu SQLite trong android
- 17. cơ sở dữ liệu sqlite không được tạo
- 18. LINQ: Sắp xếp theo ngày khi được lưu dưới dạng văn bản
- 19. Lỗi khi tách cơ sở dữ liệu SQLite - cơ sở dữ liệu bị khóa
- 20. Thứ tự SQLite theo Ngày
- 21. sắp xếp JSON theo ngày
- 22. Cách tìm phiên bản tệp cơ sở dữ liệu SQLITE
- 23. sqlite không thể mở tệp cơ sở dữ liệu được mã hóa hoặc không phải là cơ sở dữ liệu?
- 24. std :: sắp xếp bản đồ theo dữ liệu?
- 25. Dữ liệu lõi UITableView sắp xếp lại
- 26. Cách hiệu quả để lưu trữ các mục có thể sắp xếp lại trong cơ sở dữ liệu
- 27. Bản ghi Android tồn tại() trong cơ sở dữ liệu?
- 28. Xóa dữ liệu theo lập trình của cơ sở dữ liệu sqlite bằng thư viện ormlite
- 29. Android đổi tên Cơ sở dữ liệu SQLite
- 30. Sử dụng cơ sở dữ liệu SQLite trong Libgdx
Cần các cột, nếu có tự động ... –
Trùng lặp: http://stackoverflow.com/q/1977341/132382 – pilcrow