2016-05-04 7 views
0

Nehmen wir an, wir haben eine Support-Software, wo der Kunde einfach in der Warteschlange stehen kann, wenn er voll ist. Der Warteschlangenindex wird mit ++ n für jeden Kunden in der Warteschlange erhöht. Index 0 bedeutet, dass Sie sich nicht mehr in der Warteschlange befinden.SQL: Korrigieren z. 1,2,4,5,7 bis 1,2,3,4,5 (Warteschlangenbestellung)

In einem Szenario jedoch, in dem ein Kunde die Warteschlange verlässt, wird der Warteschlangenindex des anderen Kunden nach ihm nicht verringert. Sagen wir, sein Index war 3 und es waren insgesamt 5 Kunden in der Schlange.

Bedeutet: 1,2,3,4,5 führte zu ->1,2,4,5 und das ist wirklich schrecklich. Stattdessen möchte ich, dass der Rest der Warteschlange ordnungsgemäß korrigiert wird und alle über der Luke verringert werden, bis keine Luke mehr vorhanden ist.

Wie korrigiere ich die Reihenfolge der Warteschlange mit einer SQL-Syntax, wo es überprüft, ob es eine Schraffur gibt, wenn ja, korrigieren Sie es?

+0

Warum haben Sie hier "sql" hinzugefügt, versuchen Sie, die Primärschlüssel neu zu nummerieren, damit sie in fortlaufender Reihenfolge sind? –

+0

Ich denke, Sie sollten den Code zur Verfügung stellen, der erklärt, wie Sie Person aus der Warteschlange entfernen – Imad

+1

Warum ist nicht so etwas wie "SELECT TOP 1 ID FROM Warteschlange WHERE Sequenz> zuvorProcessedSequence ORDER BY Sequenz" genug, um "das nächste Element in der Sequenz" zu bekommen? –

Antwort

2

Berühren Sie nicht den Tisch.

Verwenden Sie eine Abfrage, und sortieren Sie die Warteschlange nur nach der zunehmenden Autonummer oder Einwahlzeit (die Sie wahrscheinlich auch haben), und fügen Sie dann einen Zeilenzähler hinzu, um die Warteschleife anzuzeigen.

+0

Was ist die Einführungszeit und was meinst du mit row-counter? Ist es möglich, einen Beispielcode zu geben? Sorry, ich lerne immer noch über Programmierung. Danke im Voraus. – Nyprez

+0

Die meisten Anrufsysteme zeichnen die Zeit und die Dauer für den Anruf auf. Ein Zeilenzähler ist eine Funktion, die die Datensätze der Reihe nach nummeriert - wie Sie mit C#, sql, asp.net und MS-Zugriff markiert haben, sind die Optionen zu zahlreich, um hier aufzulisten. – Gustav

1

Für einen Tabellennamen Queue, mit Feldern Kunden und Position:

SELECT Queue.Customer, Queue.Position, (select count(customer) from Queue T where T.position<=Queue.Position) AS [Index] 
FROM Queue 
GROUP BY Queue.Customer, Queue.Position; 

Index ist die neue Warteschlangenposition ohne Lücken.

Offensichtlich muss das Feld Position um 1 erhöht werden, wenn neue Personen zur Warteschlange hinzugefügt werden - Sie können Index + 1 nicht für die Position eines neuen Kunden verwenden.

Verwandte Themen