Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server MS SQL:按日期分组 ID日期时间电子邮件计数 93 6/1/2014 00:00:00 4 94 6/2/2014 00:00:00 4 95 6/3/2014 00:00:00 2 96 6/4/2014 00:00:00 2 97 6/5/2014 00:00:00 2 98 6/6/2014 00:00:00 2 99 6/7/2014 00:00:00 2 73 6/8/2014 00:00:00 2 74 6/9/2014 00:00:00 2 75 6/10/2014 00:00:00 4 76 6/11/2014 00:00:00 4 77 6/12/2014 00:00:00 2 78 6/13/2014 00:00:00 2 79 6/14/2014 00:00:00 2 80 6/16/2014 00:00:00 2 81 6/17/2014 00:00:00 4 82 6/18/2014 00:00:00 4 83 6/19/2014 00:00:00 4 84 6/20/2014 00:00:00 4 100 6/21/2014 00:00:00 4 101 6/22/2014 00:00:00 4 102 6/23/2014 00:00:00 4 103 6/24/2014 00:00:00 4 89 6/27/2014 00:00:00 4 90 6/28/2014 00:00:00 4 91 6/29/2014 00:00:00 4 92 6/30/2014 00:00:00 4 104 7/1/2014 00:00:00 4 105 7/2/2014 00:00:00 4 106 7/3/2014 00:00:00 4 121 7/6/2014 00:00:00 2 122 7/7/2014 00:00:00 2 123 7/8/2014 00:00:00 2_Sql Server - Fatal编程技术网

Sql server MS SQL:按日期分组 ID日期时间电子邮件计数 93 6/1/2014 00:00:00 4 94 6/2/2014 00:00:00 4 95 6/3/2014 00:00:00 2 96 6/4/2014 00:00:00 2 97 6/5/2014 00:00:00 2 98 6/6/2014 00:00:00 2 99 6/7/2014 00:00:00 2 73 6/8/2014 00:00:00 2 74 6/9/2014 00:00:00 2 75 6/10/2014 00:00:00 4 76 6/11/2014 00:00:00 4 77 6/12/2014 00:00:00 2 78 6/13/2014 00:00:00 2 79 6/14/2014 00:00:00 2 80 6/16/2014 00:00:00 2 81 6/17/2014 00:00:00 4 82 6/18/2014 00:00:00 4 83 6/19/2014 00:00:00 4 84 6/20/2014 00:00:00 4 100 6/21/2014 00:00:00 4 101 6/22/2014 00:00:00 4 102 6/23/2014 00:00:00 4 103 6/24/2014 00:00:00 4 89 6/27/2014 00:00:00 4 90 6/28/2014 00:00:00 4 91 6/29/2014 00:00:00 4 92 6/30/2014 00:00:00 4 104 7/1/2014 00:00:00 4 105 7/2/2014 00:00:00 4 106 7/3/2014 00:00:00 4 121 7/6/2014 00:00:00 2 122 7/7/2014 00:00:00 2 123 7/8/2014 00:00:00 2

Sql server MS SQL:按日期分组 ID日期时间电子邮件计数 93 6/1/2014 00:00:00 4 94 6/2/2014 00:00:00 4 95 6/3/2014 00:00:00 2 96 6/4/2014 00:00:00 2 97 6/5/2014 00:00:00 2 98 6/6/2014 00:00:00 2 99 6/7/2014 00:00:00 2 73 6/8/2014 00:00:00 2 74 6/9/2014 00:00:00 2 75 6/10/2014 00:00:00 4 76 6/11/2014 00:00:00 4 77 6/12/2014 00:00:00 2 78 6/13/2014 00:00:00 2 79 6/14/2014 00:00:00 2 80 6/16/2014 00:00:00 2 81 6/17/2014 00:00:00 4 82 6/18/2014 00:00:00 4 83 6/19/2014 00:00:00 4 84 6/20/2014 00:00:00 4 100 6/21/2014 00:00:00 4 101 6/22/2014 00:00:00 4 102 6/23/2014 00:00:00 4 103 6/24/2014 00:00:00 4 89 6/27/2014 00:00:00 4 90 6/28/2014 00:00:00 4 91 6/29/2014 00:00:00 4 92 6/30/2014 00:00:00 4 104 7/1/2014 00:00:00 4 105 7/2/2014 00:00:00 4 106 7/3/2014 00:00:00 4 121 7/6/2014 00:00:00 2 122 7/7/2014 00:00:00 2 123 7/8/2014 00:00:00 2,sql-server,Sql Server,生成输出 ID DateTime EmailCount 93 6/1/2014 00:00:00 4 94 6/2/2014 00:00:00 4 95 6/3/2014 00:00:00 2 96 6/4/2014 00:00:00 2 97 6/5/2014 00:00:00 2 98 6/6/2014 00:00:00 2 99 6/7/2014 00:00:00 2 73 6/8/2014 00:00:00 2 74 6/

生成输出

ID DateTime EmailCount 93 6/1/2014 00:00:00 4 94 6/2/2014 00:00:00 4 95 6/3/2014 00:00:00 2 96 6/4/2014 00:00:00 2 97 6/5/2014 00:00:00 2 98 6/6/2014 00:00:00 2 99 6/7/2014 00:00:00 2 73 6/8/2014 00:00:00 2 74 6/9/2014 00:00:00 2 75 6/10/2014 00:00:00 4 76 6/11/2014 00:00:00 4 77 6/12/2014 00:00:00 2 78 6/13/2014 00:00:00 2 79 6/14/2014 00:00:00 2 80 6/16/2014 00:00:00 2 81 6/17/2014 00:00:00 4 82 6/18/2014 00:00:00 4 83 6/19/2014 00:00:00 4 84 6/20/2014 00:00:00 4 100 6/21/2014 00:00:00 4 101 6/22/2014 00:00:00 4 102 6/23/2014 00:00:00 4 103 6/24/2014 00:00:00 4 89 6/27/2014 00:00:00 4 90 6/28/2014 00:00:00 4 91 6/29/2014 00:00:00 4 92 6/30/2014 00:00:00 4 104 7/1/2014 00:00:00 4 105 7/2/2014 00:00:00 4 106 7/3/2014 00:00:00 4 121 7/6/2014 00:00:00 2 122 7/7/2014 00:00:00 2 123 7/8/2014 00:00:00 2 开始日期结束日期电子邮件计数 6/3/2014 00:00:00 6/14/2014 00:00:00 2 6/16/2014 00:00:00 6/16/2014 00:00:00 2 7/6/2014 00:00:00 7/8/2014 00:00:00 2 6/1/2014 00:00:00 6/11/2014 00:00:00 4 6/17/2014 00:00:00 6/24/2014 00:00:00 4 6/27/2014 00:00:00 7/3/2014 00:00:00 4
在这里,生成的输出并不完美,因为我希望StartDate按如下组结束:(2014年6月3日至2014年6月9日,EmailCount=2)和(2014年6月10日至2014年6月11日,EmailCount=4)和(2014年6月12日至2014年6月14日,EmailCount=2)。此外,不应将数据库中不存在的日期添加到组中。

要解释的查询有点复杂,但这里有一个尝试

如果时间始终为午夜,则可以使用公共表表达式为每行指定行号,并根据日期和行号之间的差异进行分组。只要序列没有中断(即日期是连续的,并且具有相同的emailid),它们将在同一组中结束,外部查询可以轻松提取每个组的开始和结束日期

Startdate EndDate EmailCount 6/3/2014 00:00:00 6/14/2014 00:00:00 2 6/16/2014 00:00:00 6/16/2014 00:00:00 2 7/6/2014 00:00:00 7/8/2014 00:00:00 2 6/1/2014 00:00:00 6/11/2014 00:00:00 4 6/17/2014 00:00:00 6/24/2014 00:00:00 4 6/27/2014 00:00:00 7/3/2014 00:00:00 4


如果日期时间不总是午夜,分组将失败。如果是这种情况,您可以添加一个公共表表达式,在运行此查询之前,将datetime转换为日期作为一个单独的步骤。

您正在查找具有相同EmailID的块中连续日期的运行。这假设您在日期上没有间隔。我不确定这是不是最优雅的方法,但你可以在这个话题上找到很多东西

WITH cte AS (
 SELECT dateandtime, emailid,
   ROW_NUMBER() OVER (PARTITION BY emailid ORDER BY dateandtime) rn
 FROM mytable
)
SELECT MIN(dateandtime) start_time, 
       MAX(dateandtime) end_time, 
       MAX(emailid) emailid
FROM cte GROUP BY DATEADD(d, -rn, dateandtime) ORDER BY start_time

我很困惑这个问题与你的问题有什么不同,为什么答案不能解决你的问题。
with BlockStart as (
    select t.StartDate, t.EmailID
    from T as t left outer join T as t2
        on t2.StartDate = t1.StartDate - 1 and t2.EmailID = t1.EmailID
    where t2.StartDate is null
    union all
    select max(StartDate) + 1, null
    from T
) as BlockStart
select
    StartDate,
    (select min(StartDate) - 1 from BlockStart as bs2 where bs2 > bs.StartDate) as EndDate,
    EmailID
from BlockStart as bs
where
    EmailID is not null
    -- /* or */ exists (select 1 from BlockStart as bs3 where bs3.StartDate > bs.StartDate)