通过与当前行中的数据相关的条件,选择除当前行之后的几行之外的其他行

时间:2019-01-16 04:39:28

标签: mysql sql

帮助我进行查询。我需要某种方式的小组排,但我不知道。 我们有包含客户呼叫数据的表,该查询需要统计。

条件:一项内容中某个日期范围内一个人的多次通话。

表:

id  id_person  created_date  
1   1          2019-01-01 10:10:10  
2   1          2019-01-02 10:10:10  
3   1          2019-01-02 10:15:10  
4   1          2019-01-05 10:20:10  
5   2          2019-01-01 10:10:10  
6   2          2019-01-02 10:10:10  
7   3          2019-01-02 10:15:10  

例如我们在3天内设置了差距参数

查询结果:

1   1          2019-01-01 10:10:10  
4   1          2019-01-05 10:20:10  
5   2          2019-01-01 10:10:10  
7   3          2019-01-02 10:15:10  

例如我们在1天内设置了差距参数

查询结果:

1   1          2019-01-01 10:10:10  
3   1          2019-01-02 10:15:10  
4   1          2019-01-05 10:20:10  
5   2          2019-01-01 10:10:10  
7   3          2019-01-02 10:15:10  

需要按person_id分组,但row.created_date + gap中包含的行除外

1 个答案:

答案 0 :(得分:0)

您的问题已经被问过了

此解决方案应该可以解决您的问题,您可以应用所需的任何间隙参数:Link

SELECT  
    id_person,
    created_date,
    DATEADD(DAY, NoGroup*3, '1999-01-01') AS [Gap Start],
    DATEADD(DAY, NoGroup*3+2, '1999-01-01') AS [Gap End],  
    SUM(DPT)
FROM 
     (
    SELECT
        id_person,
        created_date, 
        DATEDIFF(DAY, '1999-01-01', created_date) AS NoDays,
        DATEDIFF(DAY, '1999-01-01', created_date)/3 AS NoGroup,
        DPT
    FROM your_table
     ) subquery
GROUP BY 
    id_person,
    created_date;