2017-03-23 1 views
0

데이터가 UTC로 DB에 저장되어 있으므로 UTC로 로컬 변환 한 다음 현지 시간으로 결과를 표시해야합니다. 나는 인도 출신이므로 오늘 데이터를 검색하려면 3 월 22 일 오후 6시 30 분부터 3 월 23 일 오후 6시 30 분까지 UTC를 쿼리해야합니다. 이제부터 매일 오후 4시 30 분까지 매일 데이터를 확인하고 싶다고 가정 해보십시오. 지금은에서 2 일간 특정 데이터 얻기 timerange

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년 3월 23일 00에서 값을 페치 [내 목표 4:30 오후 자정에서 매일 방문자 수를 얻을 수 있습니다 간단한 단어에서이 쿼리를 작성 00 : 00 ~ 2017-03-23 ​​16:30:00. 내가 원하는 것은 18:29:59부터 16:30:30까지 매일 16 일에서 23 일 사이의 데이터의 결과를 보여주는 것입니다. 기억 나는 매일의 결과가 언젠가는 필요하지 않다는 것을 기억하십시오. 아무도 도울 수 있습니다

답변

0

다음 절을 대신 사용해 보았습니까?

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 
: 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" 

3. 편집
확인, - - 왜하지 ;-) 여기 (또는하지 않을 수 있습니다) 자신의 문제를 해결할 수있는 또 다른 솔루션입니다

하위 쿼리에 제공된 예제 데이터에서 직접 작동하는 격리 된 쿼리입니다. 그것은 다음과 같은 결과리스트에 ("DM1"= 일을 뺀 1) :

dm7 | dm6 | dm5 | dm4 | dm3 | dm2 | dm1 | today 
    1 | 0 | 4 | 4 | 0 | 0 | 0 |  0 

당신은 여기를 테스트 할 수 http://rextester.com/ITLBL24540

+0

나는 내가 원하는 것은 내가 원하는 그래서 자정 12:00에 오후 4:00 정오 일상의 데이터를 확인하려면 오후 4시 내 현지 시간 같은 특정 인스턴스에, 조금 내 질문을 편집 매일의 데이터를 볼 수 있습니다. 지금은 4 시까 지 오늘의 데이터를 보여 주지만, 다른 데이터는 하루 종일 데이터를 보여줍니다. – user2972115

+0

내 질문에 분명하지 않을 수 있습니다. 1) 7 일 결과를 검색하려고합니다. 2) 자정 12 시부 터 4 시까 지 매일 데이터에 데이터를 표시하고 싶습니다. 예를 들어 오후 4시에 예를 들어, 요일, 어제, 어제 전날 등. 제 질문에 답변 해 주셔서 감사합니다. – user2972115

+0

감사합니다. 이 작품! – user2972115

0

당신은 업데이트]

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" 

로 WHERE 절을 변경해야합니다

  • 오늘 자정 : DATEADD (d, 0, DATEDIFF (d, 0, GETDATE()))
  • 당일 오후 4 : DATEADD (시, (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())))) 
) 
+0

내 질문을 약간 편집했는데, 오후 4시와 같은 특정한 경우에 내 특정 시간에 데이터를 확인하고 싶습니다. 12:00 자정부터 4:00 PM 정오까지 매일 데이터를 확인하고 싶습니다.지금 당장하는 일은 4 시까 지 오늘의 데이터를 보여 주지만 다른 사람들에게는 하루 종일 데이터를 표시하는 것입니다. – user2972115

+0

내 질문에 명확하지 않을 수 있습니다. 1) 7 일 결과를 검색하려고합니다. 2) 자정 12 시부 터 매일 오후 4시에 예를 들어 오후 4시에 예를 들어 요일, 오늘, 어제, 어제 전날의 각 방문자에 대한 방문자 수입니다. 내 질문에 대한 답변 시간내어 주셔서 감사합니다 – user2972115

+0

내 대답을 업데이트했습니다 (업데이트 2 참조). – Kevin

관련 문제