2017-05-17 3 views
0

Ich habe eine Tabelle untenUpdate, wenn die ID auf Zeitdifferenz basierend

std_id intra_id number startime   
1  245  18970 20170101 10:30:31 
2  245  18970 20170101 10:40:00 
3  245  18970 20170101 10:50:12 
4  789  6586 20170101 12:34:45 
5  754  346456 20170101 10:23:45 
6  4332 234567 20170101 10:13:40 
7  4332 234567 20170101 10:26:46 

Verbindungstisch

intra_id number endimeime 
    245  18970 20170101 10:29:31 
    789  6586 20170101 12:34:45 
    754  346456 20170101 10:23:45 
    4332 234567 20170101 10:12:30 

Erwartete Ausgabe:

std_id intra_id number startime   diff 
    1 245 18970 2017-01-01 10:30:31 60 
    2   18970 2017-01-01 10:40:00 629 
    3   18970 2017-01-01 10:50:12 1241 
    4 789 6586 2017-01-01 12:34:45 0 
    5 754 346456 2017-01-01 10:23:45 0 
    6 4332 234567 2017-01-01 10:13:40 70 
    7   234567 2017-01-01 10:26:46 856 

ich dies versucht haben, von Zeit zu nehmen, Unterschied zwischen Startzeit von der i/p und Endzeit von der Verbindungstabelle. aber es wird nicht entsprechend meiner erwarteten Ausgabe aktualisiert.

so, wenn meine intra_id count> 1 für die gleiche Anzahl, aber unterschiedliche std_id dann einzelne intra_id für die Zahl, die weniger diff-Zeit hat haben, hat

+0

Ich verstehe nicht, wie Sie am Ausgang angekommen sind? –

+0

habe ich noch nicht, ich muss die erwartete Ausgabe erreichen. Ich muss die Haupttabelle basierend auf dem Zeitunterschied aktualisieren – Rajesh

+1

Es ist nicht klar, wie Sie mit den von Ihnen bereitgestellten Daten zu Ihrer erwarteten Ausgabe gekommen sind. –

Antwort

1

Sie können die folgende Abfrage verwenden:

SELECT std_id, IF(grp = 1, intra_id, '') AS intra_id, 
     number, startime, diff 
FROM (  
    SELECT std_id, 
      intra_id, 
      @grp := IF(intra_id = @id, @grp + 1, 
        IF(@id := intra_id, 1, 1)) AS grp, 
      number, startime, diff 
    FROM (
     SELECT t1.std_id, t1.intra_id, t1.number, t1.startime, 
      TIME_TO_SEC(TIMEDIFF(t1.startime, t2.endtime)) AS diff 
     FROM table1 AS t1 
     JOIN table2 AS t2 ON t1.intra_id = t2.intra_id) AS t 
    CROSS JOIN (SELECT @id := 0) AS v 
    ORDER BY t.intra_id, diff) AS x; 

die Abfrage verwendet Variablen, um den intra_id ‚nicht angezeigt werden‘ -Effekt zu erzielen, obwohl diese vorzugsweise durch die Präsentationslogik der Anwendung gehandhabt wird.

Demo here

+0

Danke für die Abfrage. aber ich sehe intra_id noch AHS Wert wo std_id = 3 .. es auch null – Rajesh

+0

@Rajesh Bitte überprüfen Sie die bearbeiten ich gemacht sein sollte. –

+0

Danke Es funktioniert. – Rajesh

Verwandte Themen