获取2日期的特定数据以获取时间范围

时间:2017-03-23 12:21:26

标签: mysql sql datetime

数据以UTC格式存储在数据库中,我必须将本地转换为UTC获取它然后以本地时间显示结果。 现在我来自印度,所以如果我想搜索今天的数据,我必须在3月22日下午6:30 UTC到3月23日下午6:30 UTC查询。现在说我想检查一周中每天的数据,直到现在是当地时间下午4:30。现在我写了这个查询[简单来说,我的目标是获取每天上午12点到下午4点30分的访客号码]

SELECT
            FLOOR(TIMESTAMPDIFF(HOUR, "2017-03-16 18:29:59",
            visit.date_created)/24) as dayofweek,
            DAYOFWEEK(visit.date_created) day_num,
   @rownum := @rownum + 1 as date_created_set_av,
            count(distinct(visit.pkey)) AS Visits,
            sum(revenue) AS Revenue,
            sum(revenue) / count(distinct(visit.pkey)) as EPC
            FROM la_20.visit, la_20.action 
            cross join (select @rownum := 0) r   
            WHERE visit.pkey=action.pkey  and (visit.is_bot = 0)
            AND visit.date_created >="2017-03-16 18:29:59" 
            AND visit.date_created <="2017-03-23 18:29:59"  
            AND TIME(visit.date_created)<="16:30:00"
   GROUP BY dayofweek order by day_num

但它的作用是从2017-03-23 00:00:00到2017-03-23 16:30:00取值。我需要的是显示从18:29:59到16:30:00的第16到第23日常数据的结果。记住我需要每天的结果而不是一天的结果。任何人都可以帮忙

2 个答案:

答案 0 :(得分:0)

您是否尝试过以下where子句?

Bultan data = new Bultan();

var file = Path.Combine(@"FILE PATH");
if (File.Exists(file))
{
    data = JsonConvert.DeserializeObject<Bultan>(File.ReadAllText(file));
}

第3。修改
好的,因为OP又想要一些不同的东西 - 为什么不呢?-)-这是另一种可能(或可能不)解决他的问题的解决方案:

WHERE visit.pkey=action.pkey and (visit.is_bot = 0)
        AND visit.date_created >="2017-03-22 18:29:59" 
        AND visit.date_created <="2017-03-23 14:29:59"  

这是一个独立的查询,它直接处理子查询中给出的样本数据。它产生以下列表(&#34; dm1&#34; = day减1):

SELECT 
 COUNT( CASE WHEN d between 
        adddate(curdate(), interval -7 day) AND addtime(adddate(curdate(), interval -7 day),'16:00:00')
             THEN 1 END ) dm7,
 COUNT( CASE WHEN d between 
        adddate(curdate(), interval -6 day) AND addtime(adddate(curdate(), interval -6 day),'16:00:00')
             THEN 1 END ) dm6,
 COUNT( CASE WHEN d between 
        adddate(curdate(), interval -5 day) AND addtime(adddate(curdate(), interval -5 day),'16:00:00')
             THEN 1 END ) dm5,
 COUNT( CASE WHEN d between 
        adddate(curdate(), interval -4 day) AND addtime(adddate(curdate(), interval -4 day),'16:00:00')
             THEN 1 END ) dm4,
 COUNT( CASE WHEN d between 
        adddate(curdate(), interval -3 day) AND addtime(adddate(curdate(), interval -3 day),'16:00:00')
             THEN 1 END ) dm3,
 COUNT( CASE WHEN d between 
        adddate(curdate(), interval -2 day) AND addtime(adddate(curdate(), interval -2 day),'16:00:00')
             THEN 1 END ) dm2,
 COUNT( CASE WHEN d between 
        adddate(curdate(), interval -1 day) AND addtime(adddate(curdate(), interval -1 day),'16:00:00')
             THEN 1 END ) dm1,
 COUNT( CASE WHEN d between 
                curdate()                   AND addtime(        curdate()                  ,'16:00:00')
             THEN 1 END ) today
FROM (select     '2017-03-17 15:00:01' d
union all select '2017-03-19 14:00:01'
union all select '2017-03-19 12:00:01'
union all select '2017-03-19 13:00:01'
union all select '2017-03-19 11:00:01'
union all select '2017-03-20 11:20:01'
union all select '2017-03-20 11:30:01'
union all select '2017-03-20 10:40:01'
union all select '2017-03-20 10:23:01' ) dates

您可以在此处进行测试:http://rextester.com/ITLBL24540

答案 1 :(得分:0)

您应该将WHERE子句更改为

WHERE visit.pkey=action.pkey  and (visit.is_bot = 0)
AND visit.date_created >="2017-03-22 18:29:59" and visit.date_created <="2017-03-23 14:29:59"  

<强>已更新

  • 今天午夜:DATEADD(d,0,DATEDIFF(d,0,GETDATE()))
  • 今天下午4点:DATEADD(HOUR,16,DATEADD(d,0,DATEDIFF(d,0,GETDATE())))

    WHERE visit.pkey=action.pkey  and (visit.is_bot = 0)
    AND visit.date_created >= DATEADD(d,0,DATEDIFF(d,0,GETDATE())) and visit.date_created <= DATEADD(HOUR, 16, DATEADD(d,0,DATEDIFF(d,0,GETDATE())))
    

更新2: 然后你必须像我这样扩展你的where子句。

WHERE visit.pkey=action.pkey  and (visit.is_bot = 0)
AND (
    (visit.date_created >= DATEADD(d, 0,DATEDIFF(d,0,GETDATE())) and visit.date_created <= DATEADD(HOUR, 16, DATEADD(d, 0,DATEDIFF(d,0,GETDATE()))))
 OR (visit.date_created >= DATEADD(d,-1,DATEDIFF(d,0,GETDATE())) and visit.date_created <= DATEADD(HOUR, 16, DATEADD(d,-1,DATEDIFF(d,0,GETDATE()))))
 OR (visit.date_created >= DATEADD(d,-2,DATEDIFF(d,0,GETDATE())) and visit.date_created <= DATEADD(HOUR, 16, DATEADD(d,-2,DATEDIFF(d,0,GETDATE()))))
 OR (visit.date_created >= DATEADD(d,-3,DATEDIFF(d,0,GETDATE())) and visit.date_created <= DATEADD(HOUR, 16, DATEADD(d,-3,DATEDIFF(d,0,GETDATE()))))
 OR (visit.date_created >= DATEADD(d,-4,DATEDIFF(d,0,GETDATE())) and visit.date_created <= DATEADD(HOUR, 16, DATEADD(d,-4,DATEDIFF(d,0,GETDATE()))))
 OR (visit.date_created >= DATEADD(d,-5,DATEDIFF(d,0,GETDATE())) and visit.date_created <= DATEADD(HOUR, 16, DATEADD(d,-5,DATEDIFF(d,0,GETDATE()))))
 OR (visit.date_created >= DATEADD(d,-6,DATEDIFF(d,0,GETDATE())) and visit.date_created <= DATEADD(HOUR, 16, DATEADD(d,-6,DATEDIFF(d,0,GETDATE()))))
 )