我有一个包含trhese colums的表:
APPOINTSMENTS
|id
|worker_id
|post_id
|date
我可以使用此查询找到每个工作人员的最后约会:
SELECT * FROM (
SELECT id,worker_id,post_id,max(date) as date
FROM appointments
GROUP BY worker_id
)
如何找到每个工人的上一个约会(前一个约会)?如何使用过程(但sqlite不支持它,但无论如何)。
答案 0 :(得分:4)
首先获得每个工人的最高日期。
SELECT
worker_id, MAX(date) AS max_date
FROM appointments
GROUP BY worker_id
然后,您可以在下一步中将此查询用作子查询 获得低于实际最高日期的每个工人的最高日期。
SELECT
a.id, a.worker_id, a.post_id, MAX(a.date) AS second_highest_date
FROM appointments a
JOIN (
SELECT
worker_id, MAX(date) AS max_date
FROM appointments
GROUP BY worker_id
) md
ON a.worker_id = md.worker_id
AND a.date < md.max_date
GROUP BY a.worker_id
答案 1 :(得分:2)
以下是执行此操作的一种方法:
select a.*
from appointments a
where 2 = (select count(*)
from appointments a2
where a2.worker_id = a.worker_id and
a2.date >= a.date
);
假设每个&#34;工人&#34;的日期都是唯一的,这将适用于&#34; nth&#34;日期。相同的逻辑可以用于不唯一的日期,但在这种情况下你必须明确说明你想要的东西。