如何计算存储过程中多个行中两个日期之间的差

问题描述 投票:1回答:2

我有这样的数据表

id  typeid      date
12  exited      01-06-2017    
1   approved    05-06-2017
7   attended    08-06-2017
9   admitted    10-06-2017
45  approved    12-06-2017
67  admitted    16-06-2017 

我想要的答案将是这样的:

difference(days)
5 
4 

我想计算已批准允许之间的日期差异(无论它们在哪里,所以我认为我们必须使用循环语句)。我想在MySql(版本:5.6)中编写一个存储过程,该存储过程以任何形式(可能是具有这些结果的表)返回结果。

mysql sql stored-procedures
2个回答
1
投票

这实际上是窗口函数非常适合的一种问题,但是由于您使用的是5.6版,因此这是不可能的。这是执行此操作的一种方法:

SELECT
    DATEDIFF(
        (SELECT t2.date FROM yourTable t2
         WHERE t2.typeid = 'admitted' AND t2.date > t1.date
         ORDER BY t2.date LIMIT 1),
        t1.date) AS difference
FROM yourTable t1
WHERE
    typeid = 'approved'
ORDER BY
    date;

上述查询的逻辑是,我们仅限制批准类型的记录。对于每个这样的记录,我们使用相关的子查询,然后向前搜索并寻找时间,并找到允许类型的记录。然后,我们计算这两个日期之间的差。检查下面的可用演示链接。

Demo


0
投票
如果您担心性能,可以为每行分配一个值,该值是“已允许”的累积数量。然后使用它进行聚合:
© www.soinside.com 2019 - 2024. All rights reserved.