gpt4 book ai didi

php - 在 MySQL 中查找自上次暂停以来的时间段

转载 作者:可可西里 更新时间:2023-11-01 08:09:49 27 4
gpt4 key购买 nike

我需要找到自上次暂停以来几天内没有暂停的时间段。我有下一张 table :

id | user |    date
-----------------------
1 | 1 | 16.02.2017
1 | 1 | 15.02.2017
1 | 1 | 14.02.2017
1 | 1 | 13.02.2017
1 | 1 | 10.02.2017

Last pause: 10-13 February

Last period without pause: 4 days

我试图找到像 in this question 这样的日子之间的区别,但结果总是 NULL。这只是第一部分。对于第二部分,我想使用排名之类的东西,但不知道它是否有效。

我计划将它与 PHP 7 + MySQL 5.6 一起使用。

最佳答案

我用过这个示例:

create table if not exists myt(id int, dd date);
insert into myt values
(1, '2017-01-01'),
(1, '2017-01-02'),
(1, '2017-01-03'),
(1, '2017-01-04'),
(1, '2017-01-08'),
(1, '2017-01-09'),
(1, '2017-01-10');

首先你应该按连续的天数设置一个分区:

select id, dd, 
if(@last_date = '1900-01-01' or datediff(dd, @last_date) = -1, @cn := @cn, @cn := +1) consecutive,
@last_date := dd
from
(select @last_date := '1900-01-01', @cn := 0) x,
(select id, dd
from myt
order by dd desc) y
;

返回:

+----+---------------------+-------------+
| id | dd | consecutive |
+----+---------------------+-------------+
| 1 | 10.01.2017 00:00:00 | 0 |
| 1 | 09.01.2017 00:00:00 | 0 |
| 1 | 08.01.2017 00:00:00 | 0 |
+----+---------------------+-------------+
| 1 | 04.01.2017 00:00:00 | 1 |
| 1 | 03.01.2017 00:00:00 | 1 |
| 1 | 02.01.2017 00:00:00 | 1 |
| 1 | 01.01.2017 00:00:00 | 1 |
+----+---------------------+-------------+

设置分区后,获取每个分区的 MAX 和 MIN 日期:

select id, min(dd) as ini, max(dd) as fin, datediff(max(dd), min(dd)) as Days
from (
select id, dd,
if(@last_date = '1900-01-01' or datediff(dd, @last_date) = -1, @cn := @cn, @cn := +1) consecutive,
@last_date := dd
from
(select @last_date := '1900-01-01', @cn := 0) x,
(select id, dd
from myt
order by dd desc) y
) z
group by consecutive
;

结果:

+----+---------------------+---------------------+------+
| id | ini | fin | Days |
+----+---------------------+---------------------+------+
| 1 | 08.01.2017 00:00:00 | 10.01.2017 00:00:00 | 2 |
+----+---------------------+---------------------+------+
| 1 | 01.01.2017 00:00:00 | 04.01.2017 00:00:00 | 3 |
+----+---------------------+---------------------+------+

查看:http://rextester.com/XMIX80360

关于php - 在 MySQL 中查找自上次暂停以来的时间段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42269341/

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