2017-08-09 1 views
0

私はいくつかの行のデータを持っているいくつかのMySQLを忙しくしていました。前の行から行を引いて、すべての行を繰り返していきたいと思います。日付でMySQLの別の行から行を引く

私はいくつかのLEFTを試してみました
id day   vabaraha tagatis kasutajad slot2  DIFF 
20 2017-08-04 596247  77111  109269  33921504 980 
19 2017-08-03 591121  77525  109257  33920524 40473 
18 2017-08-02 584221  80485  109124  33880051 

を登録しようが、それを把握するカント:

id day   vabaraha tagatis kasutajad slot2  
17 2017-08-01 592698  80477  108949  33821891  
18 2017-08-02 584221  80485  109124  33880051  
19 2017-08-03 591121  77525  109257  33920524  
20 2017-08-04 596247  77111  109269  33921504  
21 2017-08-04 599451  80216  109448  33950284  
22 2017-08-05 600504  79801  109542  33969574  
23 2017-08-06 606778  78750  109618  33982244  
24 2017-08-07 634498  72758  109817  34023524  
25 2017-08-08 621859  79007  109962  34099260  
26 2017-08-09 626617  77321  110092  34166030  

私はこのようなPHPの何かとエコーたい: は、ここに私のテーブルです。 私のコード:

if(! $conn) { 
     die('Could not connect: ' . mysql_error()); 
    } 

    $mysqltime = date ("Ymd"); 
    $agotime = date('Ymd', strtotime('-1 days')); 
    //echo $mysqltime. " <br> "; 
    //echo $agotime. "<br> "; 


    $sql = "SELECT c.day, c.slot2, COALESCE(c.slot2-a.slot2,0) diff 
FROM Omaraha c 
LEFT JOIN Omaraha a ON a.day < c.day 
LEFT JOIN Omaraha b ON a.day < b.day AND b.day < c.day 
WHERE b.day IS NULL;"; 

    mysql_select_db('investee_Omaraha'); 
    $retval = mysql_query($sql, $conn); 

    if(! $retval) { 
     die('Could not get data: ' . mysql_error()); 
    } 
    while($row = mysql_fetch_assoc($retval)) { 
     echo   
     "EMP NAME : {$row['newAmount']} <br> ". 
     "EMP SALARY : {$row['vabaraha']} <br> ". 
     "EMP SALARY : {$row['tagatis']} <br> ". 
     "EMP SALARY : {$row['slot2']} <br> ". 
     "--------------------------------<br>"; 
    } 

    echo "<br><br>!! Fetched data successfully !!\n"; 

    mysql_close($conn); 

私を助けてくれてありがとう。

答えて

0

that doesのポストは、インラインプログラムのようなMySQL @変数の使用法を使用して、どのような基準でも行を数えてみるとよいでしょう。

私は逆の順序で、なぜこれらの特定のIDのあなたの基礎を理解していないが、あなたはどのような根拠で、あなたのデータを注文することができthat might help you along

でも、グループ間でワーキング+/-表示するために別の計算を得ることです@variablesはインラインプログラムのように動作し、処理される次のレコードの値とともに使用できます。私が提供した2つの例は、これが適用されている良い例を示しています。

集計の目的が何であるかを明確にすることができれば、より詳細な例を掲載することができます。なぜあなたはID 20,19,18,17で始まっていますか?IDは21,22,23などに戻ります。あなたが取り組もうとしている共通の要素は何ですか?あなたのサンプル記述から

、私はsqlvariablesを使用してみてくださいするクエリを適用している...

ので
SELECT 
     pq.* 
    from 
     (SELECT 
       o.id, 
       o.day, 
       o.vabaraha, 
       o.tagatis, 
       o.kasutajad, 
       IF(@lastSlot2 = 0, 0, o.slot2 - @lastSlot2) DayDifference, 
       @lastSlot2 := o.slot2 
      from 
       Omaraha o, 
       (select @lastSlot2 := 0) sqlvars 
      order by 
       o.day) pq 
    order by 
     pq.Day descending  

は、ここでは、なSQLVARクエリはそれとして、以前の「LastSlot2」値で始まる2つの変数を用意しますリストプロセスの開始を表します。 1日のデータの順序は、日付順にあらかじめソートされます。私は最初にif()をチェックしています。 slot2の以前の値がない場合、私はちょうど0を返します。これは最初に最初に返された最も早い日付です。その行が考慮された後、今はslot2を使って "@ lastSlot2"変数に格納します。今度は、次のレコードが@ lasSlot2の値を持つので、現在のスロットを使用して新しいレコードの差を検出できます。後続のすべてのレコードは、そのレコードのスロット2が次のサイクルのためにあった@ lastSlot2 =を持ちます。

内部クエリは曜日ごとに並べ替えられているため、すべてのクエリが処理されます。しかし今、あなたはその逆を望んでいるので、私はそのクエリを独自のものにラップし、その中からすべてを選択しなければなりませんでした。しかし、日付順に並べ替えてリストの先頭に最新の日付を戻しました。

+0

私は毎晩新しいデータを追加しています。深夜にはslot2が増加します。だからPHPで私は例をエコーし​​たい: 2017-08-09 slot2 - 2017-08-08 slot2 = 66770 申し訳ありませんが間違っているテーブル私は以前に修正されました。あなたのリンクに感謝します。 – Elx

+0

@Elx、他の例のコンテキストを見逃した場合に備えて更新されたクエリサンプル。 – DRapp

関連する問題