2016-04-17 6 views
0

Ich habe eine Abfrage so etwas wie dieses:Anzeige Ausgang für jeden Eingang in mysql query + linux

select * from bulk_upload_subscribers where SUBSCRIBER_ID='123456'; 

Ausgabe dieser Abfrage ergibt mich:

TASK_ID | PROCESS_TIME 
4790 | 2015-03-26 14:19:15 
5784 | 2015-09-10 12:29:50 
6001 | 2015-10-12 19:37:34 
6020 | 2015-10-14 16:52:36 

Jetzt benötige ich nur die letzte/letzte Ausgabe nach Datum. dh. gewünschter Ausgang:

Um dies zu erreichen, verwende ich unter Abfrage und das funktioniert auch tatsächlich!

select * from bulk_upload_subscribers where SUBSCRIBER_ID='123456' ORDER BY PROCESS_TIME desc limit 1; 

nun das Hauptszenario ist, dass, ich schreibe eine Abfrage Join the ‚task_id‘ und auf der Basis der task_id zu holen ich aus verschiedenen Tisch ‚task_name‘ bin holen. Die Abfrage ist:

select a.SUBSCRIBER_ID,b.TASK_ID,b.task_name AS Campaign_name from bulk_upload_subscribers a,bulk_upload_tasks b where subscriber_id in ('123456','234567','345678') and a.task_id=b.task_id order by a.PROCESS_TIME desc limit 1; 

Above Abfrage liefert mir nur einen Wert wegen limit 1. Kann mir jemand Anleitung geben, wie kann ich die Aufgabe erfüllen? Die Ausgabe muss drei Aufgabennamen für jede von SUBSCRIBER_ID haben.

NOTE: I have around 600 SUBSCRIBER_ID's. Solution via scripting will also help me. 

Antwort

0

Ich kenne Ihr Programm nicht genau für dieses Problem, ich denke, Sie können Schleife für jede SUBSCRIBER_ID drucken. .

Zum Beispiel können Sie ein Verfahren für die Schleife wie folgt erstellen:

CREATE PROCEDURE doiterate(p1 INT) 
BEGIN 
    label1: LOOP 
    SET p1 = p1 + 1; 
    IF p1 < 10 THEN 
     ITERATE label1; 
    END IF; 
    LEAVE label1; 
    END LOOP label1; 
    SET @x = p1; 
END; 

Dies hilft Ihnen, die Ausgabe für jede der abonnenten_id zu drucken.