gpt4 book ai didi

mysql - 计算位置变化

转载 作者:行者123 更新时间:2023-11-29 02:45:38 24 4
gpt4 key购买 nike

这里是 MySql 新手。我会尽力解释我的问题。我在一个表上有以下记录:

Date       | Course                     | Position
-------------------------------------------------
2017-02-28 | Portuguese Language Course | 24
2017-03-02 | Portuguese Language Course | 23
2017-03-04 | Portuguese Language Course | 24
2017-03-08 | Portuguese Language Course | 26

我正在努力查询以获取以下内容:

Date       | Course                     | Position | Variation
---------------------------------------------------|----------
2017-03-08 | Portuguese Language Course | 26 | +2
2017-03-04 | Portuguese Language Course | 24 | +1
2017-03-02 | Portuguese Language Course | 23 | -1
2017-02-28 | Portuguese Language Course | 24 | 0

简而言之,我想按降序获取每个日期列位置的变化。

知道我应该如何处理这个问题吗?

感谢任何帮助。

提前致谢

路易斯

最佳答案

您可以使用子查询。

SELECT t.*, t.position - t2.position as variation
FROM courses t, courses t2
WHERE t2.course = t.course
AND t2.date = COALESCE((SELECT MAX(t3.date)
FROM courses t3
WHERE t3.course = t.course
AND t3.date < t.date), t.date)
ORDER BY t.date DESC

这将在 1 行到 1 行的基础上将表与自身连接起来。
对于 t 中的每一行,我们将其与 t2 中的一行配对,这是 t.date 之前的最新行。

为此,我们必须获取最大日期,我们在子查询中执行此操作。但是该子查询无法告诉我们哪个位置与该日期相关联,因此我们使用 t2 在子查询之外匹配它。

最后,还有没有更早日期的情况。为此,我们只使用记录 where t2.date = t.date。当第一个参数为 null 时,COALESCE 将使用第二个参数,因此在这里很方便。

关于mysql - 计算位置变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42705999/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com