我需要的是,显示第一个完成日期的机器id和操作id的唯一组合,这将使用功能组完成,我想再次显示完成日期的机器id和操作id的唯一组合后,必须在第一个选定的完成日期。
到目前为止,我所尝试的是如下所示。
$query = "SELECT *
FROM maintenance_entry_table
LEFT JOIN (
SELECT (done_on_date) AS done_on_date1, maintenance_entry_table.*
FROM maintenance_entry_table $where
GROUP BY machine_id,operation_id) as groupedDate
ON maintenance_entry_table.machine_id = groupedDate.machine_id
AND maintenance_entry_table.operation_id = groupedDate.operation_id
AND maintenance_entry_table.done_on_date > groupedDate.done_on_date1
group by machine_id, operation_id”;
$where被明确定义为where子句。
但似乎不起作用。由于机器id和操作id的独特组合,它在日期上显示相同的完成日期,而不是之后的完成日期。我完全不知道。
下面给出了它在html页面上的进一步显示方式。
echo "<tr>";
echo "<td>" . $row['machine_id'] ."</td>";
echo "<td>" . $row['operation_id'] ."</td>";
echo "<td>" . $row['done_on_date'] ."</td>";
echo "<td>" . $row['done_on_date1'] ."</td>"; //this brings up same date as 'done_on_date' whereas it should be the next date coming in row for the unique combination of machine_id and operation_id
echo "</tr>";
如果我进一步解释的话,比如说,你有两辆保时捷汽车,分别是保时捷1系和保时捷2系。现在,保时捷1型车在一年内被送去维修4次。现在让我们假设执行的服务类型是相同的,称为服务1。因此,保时捷1的首次保养时间是2017年4月1日。保时捷第二次保养时间为2017年4月15日。保时捷1的第三次保养是2017年4月18日,保时捷1的第四次保养是2017年4月20日。我想把这些细节放在下面一行,
car_name service_name done_date done_date
porsche_1 service_1, 01/04/2017 15/04/2017
porsche_1 service_1 15/04/2017 18/04/2017
porsche_1 service_1 18/04/2017 20/04/2018
porsche_1 service_1 20/04/2017 blank //bcoz service not yet executed
其他车也一样。
希望这已经足够清楚了。
1条答案
按热度按时间6rqinv9w1#
似乎您需要每辆车和每种服务类型的所有服务日期。因为您没有包含表的模式,所以我只使用了您提到的列来编写本文。请随意添加任何缺少的列。我还创建了一个sqlfiddle来构建表并运行下面的查询。
日期不是单独的列,而是用逗号分隔的一列。在显示值时,可以很容易地分解此列。如果为每个日期创建单独的列,则必须知道最大日期数,并为每个日期构建一个带有联接的查询。
结果:
编辑
这将产生您的示例输出,对于每辆车、服务和日期,它将输出车、服务、日期和下一个服务日期:
sqlfiddle公司
问题2:
结果:
源数据: