Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.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
Mysql 从2日期获取时间范围的特定数据_Mysql_Sql_Datetime - Fatal编程技术网

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

Mysql 从2日期获取时间范围的特定数据,mysql,sql,datetime,Mysql,Sql,Datetime,数据存储在UTC的DB中,我必须将本地转换为UTC获取数据,然后在本地时间显示结果。 现在我来自印度,所以如果我想搜索今天的数据,我必须从UTC时间3月22日下午6:30查询到UTC时间3月23日下午6:30。现在我想检查一周中每一天的数据,直到现在,也就是当地时间下午4:30。现在我写了这个查询[简单地说,我的目标是获得每天从上午12点到下午4:30的访客数量] SELECT FLOOR(TIMESTAMPDIFF(HOUR, "2017-03-16 18:29:59"

数据存储在UTC的DB中,我必须将本地转换为UTC获取数据,然后在本地时间显示结果。 现在我来自印度,所以如果我想搜索今天的数据,我必须从UTC时间3月22日下午6:30查询到UTC时间3月23日下午6:30。现在我想检查一周中每一天的数据,直到现在,也就是当地时间下午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日每日数据的结果。记住,我需要的是每天的结果,而不是一天的结果。有人能帮忙吗?你试过下面的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"  
这是一个独立的查询,直接作用于子查询中给出的示例数据。其结果如下所示:dm1=天数减去1:

dm7 | dm6 | dm5 | dm4 | dm3 | dm2 | dm1 | today
  1 |   0 |   4 |   4 |   0 |   0 |   0 |     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"  
更新

今天午夜:DATEADDd,0,DATEDIFFd,0,GETDATE 今天下午4点:DATEADDHOUR,16,DATEADDd,0,DATEDIFFd,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()))))
 )

我稍微编辑了一下我的问题,我想要的是在一个特定的实例上,比如当地时间下午4:00,我想检查每天的数据,所以从午夜12:00到中午4:00,我想查看每天的数据。现在,它所做的是显示今天的数据直到4:00,但对于其他人,它显示全天的数据。我的问题可能不清楚1我正在尝试检索7天结果2我想显示从午夜12点到下午4点每天的数据,例如在下午4点,一周中的每一天、今天、昨天的访客是什么,前天等等。谢谢你花时间回答我的问题。我对我的问题做了一点编辑,我想要的是在一个特定的实例上,比如在当地时间下午4:00,我想检查每天的数据,所以从午夜12:00到中午4:00,我想查看每天的数据。现在它所做的是显示今天的数据直到4:00,但对于其他人,它显示全天的数据我的问题可能不清楚1我正在尝试检索7天的结果2我想显示从午夜12点到下午4点的数据每天的数据,例如在下午4点,一周中的每一天,今天,昨天的访客是什么,前天等等。感谢您花时间回答我的问题,OP需要针对SQL Server或Mysql的解决方案吗?标签显示的是MySql,但他似乎也喜欢您的SQL Server解决方案-
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()))))
 )