mysql lead函数不工作我试过了,但它是作为滞后函数工作的请帮帮我

83qze16e  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(370)

从昨天开始,我尝试在selectquery中实现lead函数功能,但它对我不起作用。

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;

电流输出

val         previous
20090101    
20120401    20090101
20120402    20120401
20120403    20120402
20120404    20120403

预期产量

val         previous

20090101    20120401
20120401    20120402
20120402    20120403
20120403    20120404
20120404    20120405
uyhoqukh

uyhoqukh1#

LEAD() 函数获取“下一行”值。我不知道你为什么叫它 prev . 我用的是化名 next 为了清楚起见。
在使用用户定义的变量时,我们可以访问 SELECT 子句,但获取下一行(即将到来的)的值是很棘手的。我们必须明确订购 inbp_ingangsdatum 按降序排列(与我们的最终排序要求相反)。
现在,我们将使用这个结果集来获取“next”行。由于顺序相反,上一个值基本上是下一个值。
我们最终将在最外层的查询中对结果集重新排序。
架构(mysql v5.6)

Create table base (inbp_ingangsdatum int);

insert into base
values 
(20090101),
(20120401),
(20120402),
(20120403),
(20120404),
(20120405);

查询#1

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 |          |

db fiddle视图

4zcjmb1e

4zcjmb1e2#

我会使用相关的子查询,并特别注意关系:

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

相关问题