MySQL Workbench中两行之间的差异,但未授权LAG

Posted

技术标签:

【中文标题】MySQL Workbench中两行之间的差异,但未授权LAG【英文标题】:Difference between two rows in MySQL Workbench, but LAG is not authorized 【发布时间】:2020-06-10 07:30:34 【问题描述】:

我有一个如本例所示的数据集:

id | product_id  |        date       |  weight
1  |    454      |2019-06-26 16:08:45|   900
2  |    454      |2019-06-27 13:24:16|   900
3  |    454      |2019-06-28 10:53:42|   899
4  |    352      |2018-04-18 10:53:42|   124
5  |    352      |2018-04-19 15:26:51|   124
6  |    112      |2019-12-08 11:44:01|   065
7  |    375      |2020-03-15 08:23:43|   483
8  |    375      |2020-03-15 18:07:33|   496
9  |    375      |2020-03-16 14:32:24|   496

而且我想只获取与前一个不同或与下一个不同的行。在示例的情况下,预期的输出是:

id | product_id  |        date       |  weight
2  |    454      |2019-06-27 13:24:16|   900
3  |    454      |2019-06-28 10:53:42|   899
7  |    375      |2020-03-15 08:23:43|   483
8  |    375      |2020-03-15 18:07:33|   496

但是,我对这个数据库只有读取权限,所以LAG() 函数不起作用。我还有哪些其他选择?

谢谢!

【问题讨论】:

【参考方案1】:

一种方法使用相关子查询:

select t.*
from (select t.*,
             (select t2.weight
              from t t2
              where t2.product_id = t.product_id and t2.date < t.date
              order by t2.date desc
              limit 1
             ) as prev_weight,
             (select t2.weight
              from t t2
              where t2.product_id = t.product_id and t2.date > t.date
              order by t2.date asc
              limit 1
             ) as next_weight
      from t
     ) t
where prev_weight <> weight or next_weight <> weight;

【讨论】:

非常非常有帮助!我在另一个查询中做到了!【参考方案2】:

你可以试试:

SELECT DISTINCT *
FROM table t1
WHERE EXISTS (
              SELECT *
              FROM table t2
              WHERE t1.weight <> t2.weight
              AND   t1.product_id = t2.product_id
             )

【讨论】:

谢谢,我用临时变量解决了!但我认为你所做的也会奏效! @LucasMatosMolter 。 . .这考虑行是否相邻。例如,它会返回id = 1,即使id = 2 具有相同的权重。

以上是关于MySQL Workbench中两行之间的差异,但未授权LAG的主要内容,如果未能解决你的问题,请参考以下文章

如何获取同一列中两行之间的差异

Oracle - 两个表中两行之间的差异或变化

表格中两行之间的空间?

通过多个标签过滤或选择熊猫中两行之间的数据

mysql中两列之间的区别

引导表中两行之间的空格