在MySQL中使用LAG和GROUP BY获取每个ID的最后三个移动

在MySQL中使用LAG和GROUP BY获取每个ID的最后三个移动,mysql,sql,Mysql,Sql,我希望有人能帮我完成这个查询,我需要一个对最后一个日期的id进行分组的查询,但我希望有三列,其中有最后三个移动 因此,我尝试按id分组,并使用MAX(date)和LAG来获取最后三个移动,但我从(按id划分顺序按id…)中得到了一个错误 如果删除这两个滞后函数,则查询将运行。我不知道我是否错过了什么。我正在使用MySQL Workbench 8.0 C.E SELECT id, MAX(t1.date), LAG(Move, 2, NULL) OVER (PARTITIO

我希望有人能帮我完成这个查询,我需要一个对最后一个日期的id进行分组的查询,但我希望有三列,其中有最后三个移动

因此,我尝试按id分组,并使用MAX(date)和LAG来获取最后三个移动,但我从(按id划分顺序按id…)中得到了一个错误

如果删除这两个滞后函数,则查询将运行。我不知道我是否错过了什么。我正在使用MySQL Workbench 8.0 C.E

SELECT
    id,
    MAX(t1.date),
    LAG(Move, 2, NULL) OVER (PARTITION BY id ORDER BY id ASC) AS Move1,
    LAG(Move, 1, NULL) OVER (PARTITION BY id ORDER BY id ASC) AS Move2,
    Move AS Move3 ,
    action_ticket,
FROM table t1
GROUP BY t1.id
这是我的表格:

身份证件 日期 移动 行动票 12 25/02/20 向上的 规模 12 26/02/20 向下 规模 12 27/02/20 左边 解决了的 15 23/02/20 左边 规模 15 22/02/20 向上的 规模 15 25/02/20 正确的 解决了的
此查询应有助于:

Select * from
(SELECT
    id,
    MAX(t1.date),
    LAG(move, 2, NULL) OVER (PARTITION BY id ORDER BY id ASC) AS Move1,
    LAG(move, 1, NULL) OVER (PARTITION BY id ORDER BY id ASC) AS Move2,
    LAST_VALUE(move) OVER (PARTITION BY id ORDER BY id ASC) AS Move3,
    LAST_VALUE(action_ticket) OVER (PARTITION BY id ORDER BY id ASC) AS ActionTicket
FROM t1
GROUP BY id, move, action_ticket
) as t1
where Move1 is not null
我使用了一个派生表,该表创建了所有行,并过滤掉了
Move1
为空的行,因为该行没有足够的信息


根据您提供的数据,我不确定是否所有ID在表中都正好有3行。如果存在多种行计数,则需要重新访问此查询。

如果您包含表中的几行样本数据,以及希望看到的结果集样本,这将非常有用。请回答你的问题。