MySQL Lead函数不工作。我已经试过了,但它是作为滞后函数工作的。请帮帮我
从昨天开始,我尝试在select查询中实现lead函数功能,但它对我不起作用MySQL Lead函数不工作。我已经试过了,但它是作为滞后函数工作的。请帮帮我,mysql,database,lead,Mysql,Database,Lead,从昨天开始,我尝试在select查询中实现lead函数功能,但它对我不起作用 SELECT inbp_ingangsdatum, previous FROM (SELECT ibp.inbp_ingangsdatum, @prev previous, @prev := inbp_ingangsdatum AS prev FROM base ibp,
SELECT inbp_ingangsdatum,
previous
FROM (SELECT ibp.inbp_ingangsdatum,
@prev previous,
@prev := inbp_ingangsdatum AS prev
FROM base ibp,
(SELECT @prev := '') r
ORDER BY inbp_ingangsdatum) AS t1;
电流输出
预期产量
我会使用相关子查询,并特别注意关系:
SELECT INSD_ID, inbp_ingangsdatum, (
SELECT inbp_ingangsdatum
FROM base AS x
WHERE (inbp_ingangsdatum = base.inbp_ingangsdatum AND INSD_ID > base.INSD_ID)
OR (inbp_ingangsdatum > base.inbp_ingangsdatum)
ORDER BY inbp_ingangsdatum
LIMIT 1
) AS next_date
FROM base
ORDER BY inbp_ingangsdatum, INSD_ID
我会使用相关子查询,并特别注意关系:
SELECT INSD_ID, inbp_ingangsdatum, (
SELECT inbp_ingangsdatum
FROM base AS x
WHERE (inbp_ingangsdatum = base.inbp_ingangsdatum AND INSD_ID > base.INSD_ID)
OR (inbp_ingangsdatum > base.inbp_ingangsdatum)
ORDER BY inbp_ingangsdatum
LIMIT 1
) AS next_date
FROM base
ORDER BY inbp_ingangsdatum, INSD_ID
LEAD函数获取下一行的值。我不知道你为什么叫它prev。为了清楚起见,我使用了别名next
在使用用户定义的变量时,我们可以在SELECT子句中访问前一行的值,但获取下一行的值很棘手。我们必须按照inbp_ingangsdatum的降序顺序明确订购,降序顺序与我们的最终排序要求相反
现在,我们将使用此结果集获取下一行。由于顺序相反,上一个值基本上是下一个值
最后,我们将在最外层查询中对结果集进行重新排序
模式MySQL v5.6
问题1
结果:
LEAD函数获取下一行的值。我不知道你为什么叫它prev。为了清楚起见,我使用了别名next
在使用用户定义的变量时,我们可以在SELECT子句中访问前一行的值,但获取下一行的值很棘手。我们必须按照inbp_ingangsdatum的降序顺序明确订购,降序顺序与我们的最终排序要求相反
现在,我们将使用此结果集获取下一行。由于顺序相反,上一个值基本上是下一个值
最后,我们将在最外层查询中对结果集进行重新排序
模式MySQL v5.6
问题1
结果:
如果您在编号子查询中按DESC排序,它是否有效?否,它不起作用。@NarenP在MySQL的最新版本中;首先需要在派生表中进行显式排序,然后在外部子查询中使用会话变量。否则,订单将不可用guaranteed@Madhur我正在使用MYSQL 5。6@NarenP请参阅:。你也会因此得到分数。谢谢:如果您在编号子查询中按DESC排序,它可以工作吗?不,它不工作。@NarenP在MySQL的最新版本中;首先需要在派生表中进行显式排序,然后在外部子查询中使用会话变量。否则,订单将不可用guaranteed@Madhur我正在使用MYSQL 5。6@NarenP请参阅:。你也会因此得到分数。谢谢。但是,我得到了这个答案。输出:20090101 20120401 20120401 20121001 20120401 20121001 20120401 20121001 20120401 20121001 20120401 20121001 20120401 20121001似乎你有领带。您需要一个断开连接的列,例如ID/主键。你们有吗?是的,检查柱包含初级key@NarenP见修改后的答案。如果在获取用户变量的正确结果时遇到问题,可以使用它。谢谢。但是,我得到了这个答案。输出:20090101 20120401 20120401 20121001 20120401 20121001 20120401 20121001 20120401 20121001 20120401 20121001 20120401 20121001似乎你有领带。您需要一个断开连接的列,例如ID/主键。你们有吗?是的,检查柱包含初级key@NarenP见修改后的答案。如果在使用用户变量获得正确结果时遇到问题,可以使用它。
SELECT INSD_ID, inbp_ingangsdatum, (
SELECT inbp_ingangsdatum
FROM base AS x
WHERE (inbp_ingangsdatum = base.inbp_ingangsdatum AND INSD_ID > base.INSD_ID)
OR (inbp_ingangsdatum > base.inbp_ingangsdatum)
ORDER BY inbp_ingangsdatum
LIMIT 1
) AS next_date
FROM base
ORDER BY inbp_ingangsdatum, INSD_ID
Create table base (inbp_ingangsdatum int);
insert into base
values
(20090101),
(20120401),
(20120402),
(20120403),
(20120404),
(20120405);
SELECT
dt2.val, dt2.next
FROM
(
SELECT
@nxt AS next,
@nxt := dt.inbp_ingangsdatum AS val
FROM
(
SELECT
ibp.inbp_ingangsdatum
FROM base AS ibp
ORDER BY ibp.inbp_ingangsdatum DESC
) AS dt
CROSS JOIN (SELECT @nxt := '') AS user_init_vars
) AS dt2
ORDER BY dt2.val;
| val | next |
| -------- | -------- |
| 20090101 | 20120401 |
| 20120401 | 20120402 |
| 20120402 | 20120403 |
| 20120403 | 20120404 |
| 20120404 | 20120405 |
| 20120405 | |