Php mysql获取其他列中具有相同值的第一个和最后一个条目

Php mysql获取其他列中具有相同值的第一个和最后一个条目,php,mysql,date,Php,Mysql,Date,我有一个带有日期列和价格列的表。 “日期”列中有一行表示一年中的每一天 表格如下: 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-0

我有一个带有日期列和价格列的表。 “日期”列中有一行表示一年中的每一天

表格如下:

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.

如果日期列为Dte,金额列为amt,则查询应如下所示

从测试中选择最小值(Dte)、最大值(Dte)、CONCAT(金额,'euro')
按金额分组

看看这是否适合您。这是基于我在这里给出的另一个答案。你在一天中循环,在一个数组中积累每天与以前价格相同的数据。每次循环检测到价格变化时,都会创建一个新数组,以此类推

<?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
*/

谢谢,但这是以相同的价格分组的……我只想要连续的几天。在我上面的例子中,9月1日至4日和10月20日至21日的价格相同,但我希望10月与9月分开,因为不是连续的日子……这是一个艰难的日子,因为下次价格回到158时,你需要一对新的日期;所以在OP中,你有三个结果,尽管只有两个价格。你觉得用PHP解析结果怎么样?事实上,我有很多相同的价格,甚至不同的年份。它只用于打印不同时期的价格,可能会在同一年重复,也可能不会。这看起来很棒,正是我想要的。我可以帮上一百万的忙。对不起……就像在这个例子中一样,我想我需要将PDO查询输出为一个数组,就像在你的例子中一样。当我添加查询时,它不起作用,因此假设我没有以数组的形式正确地输出查询,我设法使它起作用,输出查询如下:while($values=$gsent->fetchall()){并在脚本中更改:$day=$fecha[0];$price=$fecha[1];to:$day=$fecha['cal_date'];$price=$fecha['price_client'];再次感谢