Nigdy nie nazywałem siebie ekspertem. Jeśli sprawiłem takie wrażenie, najuprzejmiej Cię za to przepraszam.
Tak czy inaczej - został przedstawiony konkretny problem, a Ty odpowiedziałeś w stylu "nie znasz się na bazach, masz tu link do encyklopedii, poczytaj sobie, czym są bazy relacyjne". Rozumiem, że uważasz, że tabela jest źle zaprojektowana. Jeśli jednak rzucasz takie hasło, to podpowiedz, jak być powinna. Sam jestem ciekaw i to bez żadnych złośliwości ciekaw - a nuż się czegoś nauczę. Ponieważ jednak ktoś zarzucał autorowi, że nie podał przykładowych danych, wymyślę je sam:
AY126FA65S999998UJU580015UK
AX125EA79C999997LJI7886646UL
AX125FA78B000002KJI7886546UL
AX125EA79C000001LJI7886646UL
AY126FA65S999999UJU580015UK
BZ126FA65S000003UJU580015UK
Mój zmyślony przykład (analogiczny do pierwotnego) jest następujący:
Z systemu zewnętrznego dostaję dwudziestoośmioznakowe łańcuchy, w których znaki między 11 a 16 stanowią numer kolejny wpisu generowany przez system zewnętrzny (SEQ), przy czym po przekroczeniu liczby 999999 licznik się zeruje niczym w starym samochodzie i zaczyna kręcić od 000001. Poszczególne rekordy mogą wpadać do bazy w zaburzonej kolejności, co widać powyżej. Istnieje potrzeba, aby w bazie przechowywać wyłącznie ostatnie 10000 rekordów.
Podstawowy problem - jak wyświetlić wszystkie rekordy sortując je po SEQ z zastrzeżeniem, że jeśli w bazie istnieją jednocześnie rekordy, które "przekręciły licznik", to w pierwszej kolejności mają zostać wyświetlone te sprzed wyzerowania licznika, a dopiero później te po wyzerowaniu. Pozostałe dane znajdujące się w ciągu znaków nie mają żadnego znaczenia dla sortowania.
Z powyższego przykładu wyszłoby nam coś takiego:
AX125EA79C999997LJI7886646UL
AY126FA65S999998UJU580015UK
AY126FA65S999999UJU580015UK
AX125EA79C000001LJI7886646UL
AX125FA78B000002KJI7886546UL
BZ126FA65S000003UJU580015UK
PYTANIE:
Jak stworzyć zapytanie, by wyświetlić dane w pożądany sposób, ewentualnie jak przechowywać dane w bazie, by było to łatwiejsze?