Mam bazę danych SQLite, którą muszę wykonać: Zachowaj tylko ostatnie N rekordów, posortowanych według daty. Jak to robisz?Przechowuj tylko N ostatnich rekordów w bazie danych SQLite, posortowanych według daty
Odpowiedz
Aby usunąć wszystkie oprócz ostatnich 10 rekordów.
delete
from test
where id not in (
select id
from test
order by date desc
limit 10
)
Według SQLite documentation:
Jeśli SQLite jest skompilowany z opcją kompilacji SQLITE_ENABLE_UPDATE_DELETE_LIMIT, wówczas składnia DELETE jest rozszerzony poprzez dodanie opcjonalnego ORDER BY i klauzule LIMIT.
(...)
Jeśli DELETE zawiera klauzulę ORDER BY, to wszystkie wiersze, które zostaną usunięte w przypadku braku klauzuli LIMIT są klasyfikowane według ORDER BY. Pierwsze M wierszy, gdzie M jest wartością znalezioną przez ocenę wyrażenia klauzuli OFFSET, są pomijane, a następujące N, gdzie N jest wartością wyrażenia LIMIT, są usuwane. Jeśli pozostało mniej niż N wierszy po uwzględnieniu klauzuli OFFSET lub jeśli klauzula LIMIT została oceniona na wartość ujemną, wówczas wszystkie pozostałe wiersze zostaną usunięte.
Pozwoliłoby to napisać:
DELETE FROM table WHERE expr ORDER BY date DESC LIMIT -1 OFFSET 10
~ "Jeśli pozostało mniej niż N wierszy". Co oznacza tutaj -1? –
@IgorGanapolsky Spójrz na ostatnie zdanie cytowanego akapitu: _if Klauzula LIMIT jest oceniona na wartość ujemną, wtedy wszystkie pozostałe wiersze są usuwane_. –
Więc jeśli w tabeli jest mniej niż 10 wierszy, wszystkie zostaną usunięte? –
zachować tylko ostatnie 10 rekordów, pomyśl odwrócony.
Aby usunąć starsze 10 rekordów:
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));
Daj mi znać, jak to działa dla Ciebie!
Czy data musi być w określonym formacie - np. Rrrr-mm-dd? –
Zakładając masz kolumnę id
która jest numer porządkowy (AUTO INCREMENT
), można użyć następujących:
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))
To samo zapytanie może być wykorzystywane przy użyciu kolumny timestamp (wystarczy wymienić id
z datownika kolumna)
- 1. SQLite usuwa ostatnie 25% rekordów w bazie danych
- 2. Szyny: przechowuj tłumaczenia w bazie danych
- 3. Porównaj daty (przechowywane jako ciąg) w bazie danych Android sqlite?
- 4. Wstawianie bieżącej daty i czasu w bazie danych SQLite
- 5. Przechowuj JSON w polu sqlite?
- 6. Przechowuj certyfikat X509 w bazie danych
- 7. Wstawianie rekordów zbioru danych w bazie danych
- 8. Jak dodać datę w bazie danych sqlite
- 9. Zwracanie rekordów z ostatnich 3 miesięcy tylko w MySQL
- 10. Aplikacja warstwowa: Przechowuj plik w strumieniu filestream w bazie danych
- 11. Dołącz 3 tabel w bazie danych SQLite
- 12. Jak przechowywać obraz w bazie danych SQLite
- 13. Przechowywanie wartości NaN w bazie danych SQLite
- 14. Sklep Daty czasu UTC w bazie danych
- 15. Przechowuj poufne informacje w bazie danych keepass z C#
- 16. Przechowuj zdjęcia profilów użytkowników na dysku lub w bazie danych?
- 17. Sortuj listę w porządku rosnącym według daty od sqlite
- 18. PostgreSQL jak znaleźć jakiekolwiek zmiany w ciągu ostatnich n-minut
- 19. Pomoc w zamawianiu wyniku według daty w SQLite
- 20. Pobieranie daty z bazy danych Sqlite w Androidzie
- 21. Pobieranie rekordów według daty z tylko jednodniowym porównaniem części za pomocą nhibernate
- 22. Przechowuj niepełną datę w polu daty MySQL
- 23. Wybieranie ostatnich n pozycji w szeregu czasowym
- 24. Kwerenda SQLite Android - Pierwsze 10 rekordów
- 25. Ile rekordów/tabel mogę mieć w bazie danych 1 gb?
- 26. Jak zapytać 10 losowych rekordów unikalnych w bazie danych mysql?
- 27. Jak liczyć liczbę rekordów w sqlite w Androidzie
- 28. Zapisywanie ArrayList w bazie danych SQLite w Androidzie
- 29. Jak przechowywać obiekt w bazie danych SQLite w systemie Android?
- 30. R ggplot: Zastosuj etykietę tylko do ostatnich N punktów danych na wykresie
Potrzebujesz kolumn, jeśli są autoinkrementacji ... –
Duplikat: http://stackoverflow.com/q/1977341/132382 – pilcrow