当前位置: 首页 > 知识库问答 >
问题:

在mysql中根据大小写when-then设置一个变量

柴丰
2023-03-14

我有一个Projects表,包含三列:Task_ID、Start_Date和end_date。当上一行的End_Date和当前行的Start_Date之间的差值不等于零时,我正在尝试两次递增一个名为count的变量,但它对每一行都是递增的。那么,如何基于大小写when-then语句在mysql中更改变量的值呢?

SQL查询-

SET @count := 0;
SELECT
*,
LAG(end_date) OVER(ORDER BY start_date) as prev,
DATEDIFF(LAG(end_date) OVER(ORDER BY start_date), start_date) as diff,
(CASE
    WHEN DATEDIFF(LAG(end_date) OVER(ORDER BY start_date), start_date) is NULL
    THEN @count
    WHEN DATEDIFF(LAG(end_date) OVER(ORDER BY start_date), start_date) = 0
    THEN @count
    ELSE @count := @count + 1
END) as cnt
FROM projects
;

输出-

task_id start_date end_date prev         diff cnt
1      2015-10-01 2015-10-02 NULL        NULL 1
24     2015-10-02 2015-10-03 2015-10-02   0   2
2      2015-10-03 2015-10-04 2015-10-03   0   3
23     2015-10-04 2015-10-05 2015-10-04   0   4
3      2015-10-11 2015-10-12 2015-10-05  -6   5
22     2015-10-12 2015-10-13 2015-10-12   0   6
4      2015-10-15 2015-10-16 2015-10-13  -2   7
21     2015-10-17 2015-10-18 2015-10-16  -1   8
5      2015-10-19 2015-10-20 2015-10-18  -1   9

预期产出-

task_id start_date end_date prev         diff cnt
1      2015-10-01 2015-10-02 NULL        NULL 0
24     2015-10-02 2015-10-03 2015-10-02   0   0
2      2015-10-03 2015-10-04 2015-10-03   0   0
23     2015-10-04 2015-10-05 2015-10-04   0   0
3      2015-10-11 2015-10-12 2015-10-05  -6   1
22     2015-10-12 2015-10-13 2015-10-12   0   1
4      2015-10-15 2015-10-16 2015-10-13  -2   2
21     2015-10-17 2015-10-18 2015-10-16  -1   3
5      2015-10-19 2015-10-20 2015-10-18  -1   4

共有1个答案

国跃
2023-03-14

你不知道。使用使用窗口函数:

SELECT p.*,
       SUM(diff < 0) OVER (ORDER BY start_date)
FROM (SELECT p.*,
             LAG(end_date) OVER(ORDER BY start_date) as prev,
             DATEDIFF(LAG(end_date) OVER (ORDER BY start_date), start_date) as diff
      FROM projects p
     ) p;
 类似资料:
  • 问题内容: 我有一个具有%宽度和高度的容器,因此它可以根据外部因素进行缩放。我希望容器内的字体相对于容器的大小是恒定的。有没有什么好方法可以使用CSS做到这一点?将根据原来的字体尺寸(这将是100%)将只缩放字体。 问题答案: 您也许可以使用CSS3通过计算来做到这一点,但是使用JavaScript可能更安全。 使用JS,您可以更改文本的高度,然后在调整大小的过程中将相同的计算简单地绑定到调整大小

  • 我知道我可以在每个网页的开头使用ASP/PHP语句,但这似乎使用了太多的资源;每个用户都将在每个页面上执行SET语句... 是否有一种方法可以在每个会话中设置变量或执行其他SQL语句,就像ASP中的onstart事件一样?或者,如果不对每个页面上的每个用户执行查询,如何实现我的目标?

  • 问题内容: 这个问题已经在这里有了答案 : MySQL更新案例帮助 (6个答案) 6年前关闭。 我正在尝试使用CLI脚本更新LARGE MyISAM表(2500万条记录)。该表没有被其他任何东西锁定/使用。 我想而不是对每个记录执行单个UPDATE查询,我不妨利用CASE功能。 该字段为PRIMARY。我怀疑以下查询应花费毫秒。 瞧,查询占用了CPU,并且永远无法完成。 然后,令我惊讶的是,我发现

  • 问题内容: 是否可以根据MySQL中的查询结果设置用户变量? 我想要实现的是这样的事情(我们可以假设和都是唯一的): 请注意,我知道有可能,但我不希望使用嵌套查询。 问题答案: 是的,但是您需要将变量分配移至查询中: 测试用例: 结果: 请注意,对于,或可用作分配运算符。但是,在其他语句中,赋值运算符必须为并且不是,因为在非SET语句中将其视为比较运算符。 更新: 除了下面的评论,您还可以执行以下

  • 我有一个容器有%的宽度和高度,所以它根据外部因素进行缩放。我希望容器内的字体是一个恒定的大小相对于容器的大小。使用CSS有什么好的方法可以做到这一点吗?将只根据原始字体大小(100%)缩放字体。

  • 我对JavaScript和Node.js还是个新手,所以当我的机器人需要它才能正常工作时,被扔进Promissions是相当令人畏惧的。 这基本上是我写出来的,它创建了一个名为'stored userid'的变量,我想稍后更新该变量。我试图更新它的承诺,但它似乎没有工作。 在代码中,有message.reply(“your id is”+userID);它可以按照预期工作。它将打印给一个用户'yo