Ich habe diese Abfrage versucht zu schreiben, aber kann nicht scheinen, richtig aus irgendeinem Grund oder einem anderen zu gelangen ..Benötigen Schreiben SQL-Abfrage in Postgresql Hilfe
Was ich tun müssen, ist:
Ändern Sie den Status einer Frage in "Geschlossen", wenn in den letzten 24 Stunden kein Update für diese Frage in die qUpdateTable eingefügt wurde.
Ich möchte nur, dass es geschlossen wird, wenn ein Mitarbeiter mindestens einmal darauf geantwortet hat.
Sie können feststellen, ob ein Mitarbeiter oder ein Benutzer auf die Frage geantwortet hat, indem Sie die qUpdateTable überprüfen und sehen, ob ein Feld StaffID leer ist oder einen Wert für diese bestimmten Tickets hat. Wenn eine Personal-ID vorhanden ist, wurde sie von einem Mitarbeiter aktualisiert. Ist dies jedoch nicht der Fall, wurde das Update von einem Benutzer durchgeführt.
Essentiell ist die Art, wie dies funktioniert, ist ein Benutzer eine Frage durch Einfügen in die Fragetabelle, und Antworten werden durch Einfügen in die Tabelle qUpdate gemacht und mit der ursprünglichen Frage mit dem Fremdschlüssel verknüpft - "QuestionID".
Die Tabellen:
CREATE TABLE Staff
(
ID INTEGER NOT NULL PRIMARY KEY,
Name VARCHAR(40) NOT NULL
);
CREATE TABLE Customer
(
ID INTEGER NOT NULL PRIMARY KEY,
Name VARCHAR(40) NOT NULL,
Email VARCHAR(40) NOT NULL
);
CREATE TABLE Product
(
ID INTEGER NOT NULL PRIMARY KEY,
Name TEXT NOT NULL
);
CREATE TABLE Question
(
ID INTEGER NOT NULL PRIMARY KEY,
Problem VARCHAR(1000),
Status VARCHAR(20) NOT NULL DEFAULT 'open',
Priority INTEGER NOT NULL,
LoggedTime TIMESTAMP NOT NULL,
CustomerID INTEGER NOT NULL,
ProductID INTEGER NOT NULL,
FOREIGN KEY (ProductID) REFERENCES Product(ID),
FOREIGN KEY (CustomerID) REFERENCES Customer(ID),
CHECK (Status IN ('open','closed') AND Priority IN (1,2,3))
);
CREATE TABLE qUpdate
(
ID INTEGER NOT NULL PRIMARY KEY,
Message VARCHAR(1000) NOT NULL,
UpdateTime TIMESTAMP NOT NULL,
QuestionID INTEGER NOT NULL,
StaffID INTEGER,
FOREIGN KEY (StaffID) REFERENCES Staff(ID),
FOREIGN KEY (QuestionID) REFERENCES Question(ID)
);
Einige Beispieleinsätze:
INSERT INTO Customer (ID, Name, Email) VALUES (1, 'testname1', 'testemail1');
INSERT INTO Customer (ID, Name, Email) VALUES (2, 'testname2', 'testemail2');
INSERT INTO Staff (ID, Name) VALUES (1, 'Don Keigh');
INSERT INTO Product (ID, Name) VALUES (1, 'Xbox');
INSERT INTO Question (ID, Problem, Status, Priority, LoggedTime, CustomerID, ProductID)
VALUES (1, 'testproblem1', 'open', 3, '2012-04-14 09:30', 2, 1);
INSERT INTO Question (ID, Problem, Status, Priority, LoggedTime, CustomerID, ProductID)
VALUES (2, 'testproblem2', 'open', 3, '2012-04-14 09:30', 2, 1);
INSERT INTO qUpdate (ID, Message, UpdateTime, StaffID, QuestionID) VALUES (2, 'testmessage1','2012-07-12 14:27', 1, 1);
INSERT INTO qUpdate (ID, Message, UpdateTime, QuestionID) VALUES (3, 'testmessage1','2012-06-18 19:42', 2);
Was ich bisher gemacht (was natürlich nicht funktioniert)
UPDATE Question
SET Status = 'closed'
WHERE EXISTS
(SELECT qUpdate.QuestionID
MAX(qUpdate.UpdateTime - Now() = INTERVAL '1 day') FROM qUpdate
LEFT JOIN Question ON qUpdate.QuestionID = Question.ID
WHERE qUpdate.StaffID IS NOT NULL);
I realisiere meine Erklärung kann ein wenig verwirrend sein, wenn Sie weitere Informationen benötigen, und Ich werde antworten so schnell wie möglich
+1 für die Bereitstellung aller SQL für einen Testfall (obwohl Sie die create-Tabelle für 'Produkt' verpasst haben) –
Jemand gab eine gute Antwort, aber seit es gelöscht .. Wenn jemand Licht auf was der tU Teil scheinen könnte von der Abfrage heißt dann würde es wirklich in Zukunft helfen. 'set Status = 'geschlossen' von ( wählen Frage, max (Update) Lastupdatetime von qUpdate Gruppe von QuestionID mit count (StaffID)> 0 ) tuen wo Question.ID = tU.TicketID und Question.LoggedTime
Jimmy