2017-08-28 58 views
0

我有一個包含日期列和價格列的表。 日期列在每年的每一天都有一行。mysql在其他列中獲取日期列中的第一個和最後一個日期的列表,其值等於

表是這樣的:

2017-09-01 158.00 
2017-09-02 158.00 
2017-09-03 158.00 
2017-09-04 158.00 
etc. 
2017-09-10 175.00 
2017-09-11 175.00 
etc. 
2017-10-20 158.00 
2017-10-21 158.00 

我想在具有相同的價格一時間範圍內的第一個日期和最後日期。

因此,對於上面的結果應該是:

2017-09-01 -- 2017-09-04 158 euro. 
    2017-09-10 -- 2017-09-11 175 euro. 
    2017-10-20 -- 2017-10-21 158 euro. 

任何想法?

+0

這是因爲你想在下一次價格恢復到158一個新的日期對一個艱難的一個;所以在OP中你有三個結果,即使只有兩個價格。你認爲如何解析PHP中的結果? – BeetleJuice

+0

事實上,即使在不同的年份,我也有更多相同的價格。 它僅用於打印出不同時期的價格,可能會在同一年重複,可能不會。 – Helenp

回答

1

看看這對你的作品。這是基於我在這裏給出的另一個答案。你循環的日子,每天積累與以前相同的價格在一個數組中。每當循環檢測到價格變化時,就會創建一個新數組,等等。

<?php 
$values[] = ["2017-09-01", "158.00"]; 
$values[] = ["2017-09-02", "158.00"]; 
$values[] = ["2017-09-03", "158.00"]; 
$values[] = ["2017-09-04", "158.00"]; 
$values[] = ["2017-09-10", "175.00"]; 
$values[] = ["2017-09-11", "175.00"]; 
$values[] = ["2017-10-20", "158.00"]; 
$values[] = ["2017-10-21", "158.00"]; 
$values[] = ["2017-10-22", "159.00"]; 
$values[] = ["2017-10-23", "152.00"]; 
$values[] = ["2017-10-24", "152.00"]; 
$ult = null; 
$currentRange = []; 
$ranges = []; 
foreach ($values as $fecha) { 
    $day = $fecha[0]; 
    $price = $fecha[1]; 
    if ($ult === null) { 
     $currentRange = [ 
      "price" => $price, 
      "days" => [$day] 
     ]; 
    } 
    else { 
     if ($price === $ult) { 
      $currentRange["days"][] = $day; 
     } 
     else { 
      $ranges[] = $currentRange; 
      $currentRange = [ 
       "price" => $price, 
       "days" => [$day] 
      ]; 
     } 
    } 
    $ult = $price; 
} 
$ranges[] = $currentRange; 
$rangesString = []; 
foreach ($ranges as $range) { 
    $str = $range["days"][0]; 
    if (count($range["days"]) > 1) { 
     $str .= " - ".$range["days"][count($range["days"]) - 1]; 
    } 
    $str .= ": ".$range["price"]; 
    $rangesString[] = $str; 
} 
echo (implode("<br>", $rangesString)); 

/* results: 
2017-09-01 - 2017-09-04: 158.00 
2017-09-10 - 2017-09-11: 175.00 
2017-10-20 - 2017-10-21: 158.00 
2017-10-22: 159.00 
2017-10-23 - 2017-10-24: 152.00 
*/ 

Demo

+0

這看起來很棒,正是我想要的。一百萬的感謝 – Helenp

+0

很高興我能幫上忙。 – ishegg

+0

對不起...正如在這個例子中,我想我需要輸出PDO查詢作爲一個數組相同的例子。當我添加我的查詢它不工作,所以假設我不正確輸出查詢作爲一個數組 – Helenp

0

如果您的日期欄是DTE和金額欄是AMT然後將查詢應該是這樣的

SELECT MIN(Dte), MAX(Dte), CONCAT(amt,' euro') FROM test 
GROUP BY amt 
+0

謝謝,但是把所有的價格都集中在一起......我只想要連續的日子。在我的例子上面的1-4月和20-21十月有相同的價格,但我想從十月分開,因爲不是連續的日子... – Helenp

相關問題