우선 그 제목에 대해 사과드립니다. 그러나 설명하는 방법을 모르겠습니다.여러 열의 날짜순으로 그룹화 하시겠습니까?
내 테이블에 세션을 저장하고 있는데 얼마나 많은 세션이 있었는지 시간당 세션 수를 얻고 싶습니다. 하루 동안 활동적입니다. 세션은 두 개의 시간 소인 start와 end에 의해 지정됩니다.
잘하면 도와 줄 수 있습니다. 여기
우리가 간다 : http://sqlfiddle.com/#!2/bfb62/2/0
우선 그 제목에 대해 사과드립니다. 그러나 설명하는 방법을 모르겠습니다.여러 열의 날짜순으로 그룹화 하시겠습니까?
내 테이블에 세션을 저장하고 있는데 얼마나 많은 세션이 있었는지 시간당 세션 수를 얻고 싶습니다. 하루 동안 활동적입니다. 세션은 두 개의 시간 소인 start와 end에 의해 지정됩니다.
잘하면 도와 줄 수 있습니다. 여기
우리가 간다 : http://sqlfiddle.com/#!2/bfb62/2/0
당신이하고 싶은 것이 MySQL에서는 다소 어렵습니다. 그러나 너무 어려움없이 근사값을 얻을 수 있습니다. 다음은 하루 안에 시작하고 중지하는 사용자를 계산합니다.
select date(start), hour,
sum(case when hours.hour between hour(start) and hours.hour then 1 else 0
end) as GoodEstimate
from sessions s cross join
(select 0 as hour union all
select 1 union all
. . .
select 23
) hours
group by date(start), hour
사용자가 여러 날에 걸쳐있을 경우 쿼리가 더 어려워집니다. 다음은 매시간 시작하는 사용자가 있다고 가정하는 한 가지 방법입니다.
select thehour, count(*)
from (select distinct date(start), hour(start),
(cast(date(start) as datetime) + interval hour(start) hour as thehour
from sessions
) dh left outer join
sessions s
on s.start <= thehour + interval 1 hour and
s.end >= thehour
group by thehour
참고 :이 코드는 테스트되지 않았으므로 구문 오류가있을 수 있습니다.
와우 감사합니다! 그러나 내가보기에 만약 내가 이해할 수 없기 때문에 내가 일을 할 수없는 큰 쿼리를 작성하는 대신에 24 개의 쿼리를 실행해야한다고 생각합니다 : p이 작업을 수행하는 데 약간의 트릭 만 있기를 바랬습니다. 하지만 당신의 노력에 감사드립니다. –
난 아직도 당신이 COUNT
, YEAR
, MONTH
, DAY
를 사용하여 모양, 시작 및 종료 날짜를 비교하고 싶습니다 방법을 잘 모르겠어요 동안, 그리고 HOUR
, 당신은 할 수 원하는 결과를 얻으십시오. 이와 유사한
아마 뭔가 :
SELECT COUNT(ID), YEAR(Start), HOUR(Start), DAY(Start), MONTH(Start)
FROM Sessions
GROUP BY YEAR(Start), HOUR(Start), DAY(Start), MONTH(Start)
그리고 SQL Fiddle.
안녕하세요, 고맙습니다. 그러나 이것이 해결책이라고 생각하지 않습니다.문제는 세션이 특정 시간에 활성화되었는지를 알기 위해 종료 시간도 확인해야한다는 것입니다. 다음 예제를 참조하십시오. http://sqlfiddle.com/#!2/e343d/1/0 3이 아니기 때문에 잘못되었으므로 2가 아닙니다. –
원하는 결과는 무엇입니까? 나는 아직 완전히 이해하지 못하고있다. – sgeddes
죄송합니다. 마지막 sqlfiddle을 가져 가자. 17:00에 활성화 된 세션이 3 개이므로 XXXX 17:00에 값 3을보고 싶습니다. 사용자 세션에 대해 생각해 본다면 01:00, 02에 얼마나 많은 사용자가 있었는지 간단히 알기 만하면됩니다. : 00 등. –
좋습니다. 인덱스 테이블이 복구되는 또 다른 문제입니다.
인덱스 테이블은 모든 사람이 툴킷에 포함시켜야하는 항목입니다. 마스터 테이블에 저장하는 것이 좋습니다. id int primary key
단일 열이 0에서 n까지의 연속 된 숫자를 포함하는 테이블입니다. 여기서 n은 필요한 것을 수행하기에 충분히 큰 숫자이고, 100,000은 좋고, 1,000,000이 더 좋습니다. 이 테이블을 한 번만 만들면되지만 여러 번 사용할 수 있습니다.
문제의 경우 각 시간을 고려해야하며, 문제를 이해하면 시간이 끝나기 전에 시작된 모든 세션을 계산해야하며 그 시간이 시작되기 전에 끝나지 않았습니다.
해결 방법은 SQL fiddle입니다.
인덱스 테이블의 알려진 일련 번호를 사용합니다 (이 피들은 0에서 100까지 - 4 일이 지나면 큰 n이 필요한 이유를 알 수 있습니다). . 시간.
스키마와 데이터 세트로 www.sqlfiddle.com 예제를 만들 수 있습니까? – Martin
하루 동안 활동적으로 시작일과 종료일이 같은 날에 있었던 것을 의미합니까? 또는 시작일 또는 종료일? COUNT 연산자로하기 쉬워야합니다. – sgeddes
매시간 시작 시간은 이전이어야하며 종료 시간은 그 시간 이후 여야합니다. 내 where 절에서이를 어떻게 사용할 수 있습니까? –