Hallo, ich brauche eure Hilfe, ich schreibe gerade ein Programm mit sqlite für eine Bestückungsmaschine, die 4 Köpfe hat. Jetzt möchte ich die Daten mit sqlite so sortieren, dass bei jeder Fahrt alle Köpfe voll sind. Angebommen ich habe eine Tabellle mit Komponenten Kopf,Bauteil 1,A1 2,B1 3,C1 4,D1 1,A2 2,B2 3,C3 4,D4 so möchte ich das sortiert haben. Gibt es irgendwie in Sqlite dafür eine elegante Lösung? Danke, -Michael
Aus einer aufsteigenden Zahl mit Modulo 4 plus 1 die gewünschte Nummer 1..4 erzeugen?
Die Zahlen sind so in der Tabelle, und die darf ich nicht ändern. Ich muss die nur sortieren.
Äh, ja, dass die so in der Tabelle sind und Du die nicht verändern darfst ist schon klar, dafür "programmiert" man ja auch SQL drumrum ;-) Kannst Du etwas mehr über die Tabelle preisgeben ? einen DUMP hier reinstellen, mitsamt CREATE STATEMENT ? Dann kann man etwas besser an der Sortierung arbeiten, die dann letztendlich im Abfragecode passieren muss. Nicht ganz unwichtig ist natürlich der Trigger auf Seiten deiner Maschine, d.h. WAS löst das neubefüllen aus bzw. wie bekommst Du das Rückgemeldet ? Hängt ein Programm dazwischen, was quasi eine Zustandsüberwachung macht ? SQLite muss ja irgendwie erfahren, was sich in der Zwischenzeit geändert hat, damit es einen neuen Datensatz selektieren und ggf. erneuern kann. Versteh ich das richtig, Du hast Kopf 1 bis 4 und pro Kopf kommt immer das gleiche Bauteil rein, Also Bauteil Typ A immer in Kopf 1, Bauteil Typ B immer in Kopf 2 usw .? Sobald Kopf 1 seinen Job erledigt hat soll er mit einem neuen Bauteil Typ A beladen werden ? Gruß
Michael H. schrieb: > Die Zahlen sind so in der Tabelle, und die darf > ich nicht ändern. Ich muss die nur sortieren. "Wasch' mich, aber mach' mich nicht nass"? Eine Sortierung ist doch auch eine Veränderung. Abgesehen davon hat Rufus den Weg schon vorgezeichnet: Je Kopf eine (ggf. sortierte) Liste erstellen; die Elemente dieser Listen aufsteigend nummerieren -- aber: Die Nummern in Liste A werden nach 4*N gebildet, die Nummern in Liste B nach 4*N+1 usw. Anschließend Listen verketten und nach der laufenden Nummer sortieren.
Egon D. schrieb: > Abgesehen davon hat Rufus den Weg schon vorgezeichnet: > Je Kopf eine (ggf. sortierte) Liste erstellen; die > Elemente dieser Listen aufsteigend nummerieren -- aber: > Die Nummern in Liste A werden nach 4*N gebildet, die > Nummern in Liste B nach 4*N+1 usw. Danke, das war die Lösung. Im Prinzip setze ich aus ganz vielen Joins erstzmal eine temporäre Tabelle auf. Die kann ich dann auslesen, und wie du beschrieben hast nummerieren. Die geben ihre Werte auf 'ne zweite Tabelle aus, welche dann sortiert werden. Vielen Dank an euch, für sowas liebe ich das Forum.
Michael H. schrieb: > Im Prinzip setze ich aus ganz vielen Joins > erstzmal eine temporäre Tabelle auf. Die kann ich dann auslesen, und wie > du beschrieben hast nummerieren. Die geben ihre Werte auf 'ne zweite > Tabelle aus, welche dann sortiert werden. Solange du dann nicht in der nächsten Bewerbung angibst: "Gute Datenbank- und SQL-Kenntnisse", ...
In richtiger SQL würde das ein "group by" wohl erreichen. Benutze halt was anständiges und nicht dieses Krüppel-sqlite.
Ich dachte, man kann bei einer SQL-Abfrage auch immer ein 'Order By' angeben. Dann sollte doch bei dem Select die Sortierung erfolgen. Oder habe ich das jetzt falsch verstanden?
PittyJ schrieb: > Ich dachte, man kann bei einer SQL-Abfrage auch immer ein 'Order By' > angeben. Kann man. Aber nach was willst Du sortieren, wenn die Ausgabe so aussehen soll, wie im ersten Beitrag?
> Solange du dann nicht in der nächsten Bewerbung angibst: "Gute > Datenbank- und SQL-Kenntnisse", ... kann er doch jetzt machen, bißchen Hilfe, Copy&Paste macht's möglich :-)
Soziologe schrieb: > Benutze halt was anständiges und nicht > dieses Krüppel-sqlite. Dieses "Krüppel" SQLite kann auch group by...
Michael H. schrieb: > Hallo, > > ich brauche eure Hilfe, ich schreibe gerade ein Programm mit sqlite für > eine Bestückungsmaschine, die 4 Köpfe hat. > > Jetzt möchte ich die Daten mit sqlite so sortieren, dass bei jeder Fahrt > alle Köpfe voll sind. > > so möchte ich das sortiert haben. Gibt es irgendwie in Sqlite dafür eine > elegante Lösung? Eher nicht, besonders weil sqlite keine stored procedures hat. Du versuchst unnötigerweise die Programmlogik in SQL abzubilden. Wenn bei jeder fahrt alle 4 Köpfe voll sein sollen, dann kannst du doch einfach die nächsten 4 Bauelemente aus entsprechender Tabelle nehmen und sie im Program der Köpfen "zuweisen" und fertig.
1 | SELECT row_number() OVER (PARTITION BY Kopf |
2 | ORDER BY Bauteil) AS Fahrt, |
3 | Kopf, |
4 | Bauteil |
5 | FROM EineTabelle |
6 | ORDER BY Fahrt, Kopf; |
Ist die Reihenfolge pro Kopf wirklich nach Bauteil-Name geordnet? Wenn's zufällig sein kann, lass "ORDER BY Bauteil" weg.
:
Bearbeitet durch User
Michael H. schrieb: > Angebommen ich habe eine Tabellle mit Komponenten > > Kopf,Bauteil > 1,A1 > 2,B1 > 3,C1 > 4,D1 > 1,A2 > 2,B2 > 3,C3 > 4,D4 > > so möchte ich das sortiert haben. Gibt es irgendwie in Sqlite dafür eine > elegante Lösung?
1 | ORDER BY substr(Bauteil, 2, 1), Kopf; |
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.