2017-08-28 23 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

相关问题