在SQLite中进行灌浆时获取之前的max(值)

时间:2017-10-11 09:04:26

标签: sql sqlite

我有一个包含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不支持它,但无论如何)。

2 个答案:

答案 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;日期。相同的逻辑可以用于不唯一的日期,但在这种情况下你必须明确说明你想要的东西。