我正试图在 mySQL 中完成一些事情,这很困难,因为缺少“滞后”功能,而且我读过的所有关于日期差异的例子,因为在所有这些例子中,总是有一个 ID一次约会。在这里,我试图在一个 ID 内做日期差异,当日期差异超过 60 时,然后返回 1 的指示符,否则返回 0。
不确定最好的方法是什么。将 row_number() 与日期结合使用吗?障碍是在多个 ID 中执行此操作,因为我阅读的很多内容都没有涵盖这一点。任何方向都会有所帮助。 谢谢!
ID | Service Date | Date Difference | Indicator
1 | 1/22/2016 | 0 | 1
1 | 3/26/2016 | 64 | 1
1 | 5/25/2016 | 60 | 0
1 | 9/15/2016 | 113 | 1
2 | 8/1/2016 | 0 | 1
3 | 1/26/2016 | 0 | 1
3 | 3/9/2016 | 43 | 0
3 | 4/30/2016 | 52 | 0
4 | 8/9/2016 | 0 | 1
5 | 11/19/2016 | 0 | 1
6 | 10/14/2016 | 0 | 1
7 | 1/31/2016 | 0 | 1
7 | 8/11/2016 | 193 | 1
最佳答案
您可以使用变量,但这很棘手。为了使其可靠地工作,所有变量都需要在一个表达式中赋值:
select t.*, datediff(prev_date, date) as diff,
(case when datediff(prev_date, date) < 60 then 0 else 1 end) as indicator
from (select t.*,
(case when @id = id
then (case when (@prev := @d) = NULL then 'never' -- intentional
when (@d := date) = NULL then 'never' -- intentional
else @prev
end)
when (@d := date) = NULL then 'never' -- intentional
else NULL
end) as prev_date
from t cross join
(select @id := -1, @d := '') params
order by id, date
) t
关于mysql - 在一个 id 中减去多个日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46106267/