我有两个要按日期加入的表:
表1:参考
| date |
| -------------- |
| 2018-01-01 |
| 2018-01-02 |
| 2018-01-03 |
| 2018-01-04 |
| 2018-01-05 |
| 2018-01-06 |
| 2018-01-07 |
| 2018-01-08 |
| 2018-01-09 |
| 2018-01-10 |
表2:事件
| id | date |
| -- | ---------- |
| aa | 2018-01-03 |
| bb | 2018-01-05 |
| cc | 2018-01-08 |
我希望通过日期字段将两者结合起来,以达到以下结果:
| id | reference date | event date |
| -- | -------------- | ---------- |
| aa | 2018-01-03 | 2018-01-03 |
| aa | 2018-01-04 | 2018-01-03 |
| bb | 2018-01-05 | 2018-01-05 |
| bb | 2018-01-06 | 2018-01-05 |
| bb | 2018-01-07 | 2018-01-05 |
| cc | 2018-01-08 | 2018-01-08 |
| cc | 2018-01-09 | 2018-01-08 |
| cc | 2018-01-10 | 2018-01-08 |
即,对于每个事件ID,参考日期都从该ID的最早事件日期开始,到下一个ID出现时结束。(我希望我能很好地解释这一点)。
如果我只有一个事件和一个日期,下面的代码将起作用。但是,由于有多个事件和开始日期,它分崩离析。
select
events.id,
reference.date,
events.date
from events
join reference on
reference.date >= events.date
答案 0 :(得分:1)
如果您有权使用窗口功能和CTE,则只需使用LEAD
:
WITH cte AS (
SELECT id, date, LEAD(date, 1) OVER (ORDER BY date) AS end_date
FROM events
)
SELECT cte.id, reference.date AS reference_date, cte.date AS event_date
FROM cte
INNER JOIN reference ON reference.date >= cte.date
AND (reference.date < cte.end_date OR cte.end_date IS NULL)
答案 1 :(得分:0)
使用相关子查询:
<link rel="stylesheet" href="{{ "/assets/main.css" | relative_url }}">
请注意,这使用ANSI标准语法。返回单行的语法可能因数据库而异。
许多数据库还支持横向联接和/或<?php //Location
function Location($JobID) {
$db = mysqli_connect('localhost','root','******','testdb1')
or die('Error connecting to MySQL server.');
$JobID = $_POST['JobID'];
$getinfo = "SELECT Location FROM Jobs WHERE JobID = '$JobID'";
$query = mysqli_query($db, $getinfo);
$row = mysqli_fetch_array($query);
$Location = $row['Location'];
echo "<img src='Floormap/$Location'>";
}
?>
,从而简化了子查询。