如何通过id查找Mysql(5.6版)中两行之间的差异

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

我有这样的数据

  student_id         phase           date
         34          submitted       05-03-2019
         34          review          15-04-2019
         78          submitted       06-12-2018
         34          submitted       25-04-2019
         78          review          01-01-2019
         34          review          08-05-2019

我想要的是这样的东西

student_id     GapDays  submission-date   reviewdate
34             41       05-03-2019        15-04-2019
34             13       25-04-2019        08-05-2019
78             26       06-12-2018        01-01-2019

我想要的是每个student_id的提交和评论之间的日期列差异

mysql sql date select
2个回答
0
投票

这在MySQL 8.0中会更简单(并且效率更高),我们将为此使用窗口函数。

在早期版本中,一种选择是使用相关子查询来为每个提交检索下一次审阅的日期:

select 
    t.*,
    datediff(review_date, submission_date) gapdays
from (
    select
        student_id,
        date submission_date
        (
            select min(t1.date)
            from mytable t1 
            where 
                t1.student_id = t.student_id 
                and t1.date > t.date
                and t1.phase = 'review'
        ) review_date
    from mytable t
    where t.phase = 'submitted'
) t
order by student_id, submission_date

为了提高性能,请考虑在(student_id, phase, date)上建立索引(此处索引的列顺序很重要)。>>

Demo on DB Fiddle

| student_id | submission_date | review_date | gapdays |
| ---------- | --------------- | ----------- | ------- |
| 34         | 2019-03-05      | 2019-04-15  | 41      |
| 34         | 2019-04-25      | 2019-05-08  | 13      |
| 78         | 2018-12-06      | 2019-01-01  | 26      |

0
投票

具有自我加入和聚合:

© www.soinside.com 2019 - 2024. All rights reserved.