Mysql 用于获取以日期间隔分隔的结果的查询 身份证件 时间戳 1. 2020-01-01 12:00:00 2. 2020-02-01 12:00:00 3. 2020-05-01 12:00:00 4. 2020-06-01 12:00:00 5. 2020-07-01 12:00:00
您可以使用Mysql 用于获取以日期间隔分隔的结果的查询 身份证件 时间戳 1. 2020-01-01 12:00:00 2. 2020-02-01 12:00:00 3. 2020-05-01 12:00:00 4. 2020-06-01 12:00:00 5. 2020-07-01 12:00:00,mysql,sql,Mysql,Sql,您可以使用lag(),然后使用逻辑来查看差距是否足够大,以便开始一组新的记录。累积总和可为您提供所需的组: select t.*, sum(case when prev_timestamp >= timestamp - interval 1 month then 0 else 1 end) over (order by timestamp) as grouping from (select t.*, lag(timestamp) over (orde
lag()
,然后使用逻辑来查看差距是否足够大,以便开始一组新的记录。累积总和可为您提供所需的组:
select t.*,
sum(case when prev_timestamp >= timestamp - interval 1 month then 0 else 1 end) over (order by timestamp) as grouping
from (select t.*,
lag(timestamp) over (order by timestamp) as prev_timestamp
from t
) t;
如果您想用开始和结束日期对其进行总结:
select min(timestamp), max(timestamp)
from (select t.*,
sum(case when prev_timestamp >= timestamp - interval 1 month then 0 else 1 end) over (order by timestamp) as grouping
from (select t.*,
lag(timestamp) over (order by timestamp) as prev_timestamp
from t
) t
) t
group by grouping;
您可以使用lag()
,然后使用逻辑来查看差距是否足够大,以便开始一组新的记录。累积总和可为您提供所需的组:
select t.*,
sum(case when prev_timestamp >= timestamp - interval 1 month then 0 else 1 end) over (order by timestamp) as grouping
from (select t.*,
lag(timestamp) over (order by timestamp) as prev_timestamp
from t
) t;
如果您想用开始和结束日期对其进行总结:
select min(timestamp), max(timestamp)
from (select t.*,
sum(case when prev_timestamp >= timestamp - interval 1 month then 0 else 1 end) over (order by timestamp) as grouping
from (select t.*,
lag(timestamp) over (order by timestamp) as prev_timestamp
from t
) t
) t
group by grouping;
例如,以下查询:
select group_concat(ID)
from (
select w1.ID,w1.TS,w2.ID flag
from work1 w1 left outer join work1 w2
on timestampdiff(month,w2.TS,w1.TS)=1
order by w1.ID
) w
group by
case when flag is null then @str:=ID else @str end
例如,请参见以下查询:
select group_concat(ID)
from (
select w1.ID,w1.TS,w2.ID flag
from work1 w1 left outer join work1 w2
on timestampdiff(month,w2.TS,w1.TS)=1
order by w1.ID
) w
group by
case when flag is null then @str:=ID else @str end
请参见如果您向我们展示一些方法,我们可以告诉您哪种方法最好。请看:对我来说,这似乎不是一个非常简单的问题。不幸的是,我不能提供一个例子,因为我完全不知道从哪里开始,这就是为什么我来到这里,希望有人能给我指出正确的方向。但是你知道如何构造CREATE和INSERT语句,对吗?如果你告诉我们一些方法,我们可以告诉你哪一个是最好的。请看:对我来说,这似乎不是一个非常简单的问题。不幸的是,我不能提供一个例子,因为我完全不知道从哪里开始,这就是为什么我来到这里,希望有人能给我指出正确的方向。但是你知道如何构造CREATE和INSERT语句,对吗?