SQLite 데이터베이스에서 통계 기반 응용 프로그램을 작성하고 있습니다. 사용자 로그인 및 로그 아웃 (SessionStart, SessionEnd DateTimes)을 기록하는 테이블이 있습니다.SQL 쿼리 : 두 개의 DateTime 타임 스탬프가 주어진 경우 "N 시간 동안 보았습니다"를 확인하는 방법?
사용자가 의 시간대가 인 시간을 표시 할 수있는 검색어입니다. 선 그래프 방식으로 일종의 12:00와 1:00 AM 사이에 60 명의 사용자가 로그인했습니다. (어느 시점에서든) 1시와 2시 사이에 로그인 한 사용자가 54 명이었습니다.
그리고 저는이 이유를 설명 할 수 있기를 바랍니다. 나는 레코드를 .NET으로 가져올 수 없으며 그렇게 반복 할 수 없다.
나는이 접근법이 느리고 느린 것으로 판명되었지만 다소 시간이 많이 걸리는 접근 방식, 즉 시간별 하위 쿼리를 제안했습니다. 나는 두 개의 날짜 시간이 특정 시간을 durring 볼 된 경우 (최상의 시나리오 결정하는 무슨 더 나은 방법이 궁금하네요
SELECT
case
when (strftime('%s',datetime(date(sessionstart), '+0 hours')) > strftime('%s',sessionstart)
AND strftime('%s',datetime(date(sessionstart), '+0 hours')) < strftime('%s',sessionend))
OR (strftime('%s',datetime(date(sessionstart), '+1 hours')) > strftime('%s',sessionstart)
AND strftime('%s',datetime(date(sessionstart), '+1 hours')) < strftime('%s',sessionend))
OR (strftime('%s',datetime(date(sessionstart), '+0 hours')) < strftime('%s',sessionstart)
AND strftime('%s',datetime(date(sessionstart), '+1 hours')) > strftime('%s',sessionend))
then 1 else 0 end as hour_zero,
... hour_one,
... hour_two,
........ hour_twentythree
FROM UserSession
.. 순식간에 몇 십만 기록이를 계산 할 수 있어야합니다 여러 날에 기록되었지만 필요하지 않은 경우 시간이 몇 번 엇갈 렸습니까?
내가 가진 다른 유일한 아이디어는이 "시간"테이블을 가지고 있으며 사용자가 런타임에 보았던 시간을 계산하는 것입니다. 그러나 이것은 이전 SQL보다 더 많은 해킹 인 것처럼 느낍니다.
도움이 될 것입니다.
DATE 부분을 전혀 신경 쓰지 않습니까? 전체 기록, 일부 날짜 범위 또는 매일 별도로 매시간 집계가 필요합니까? – van
날짜 부분을 잘라내는 유일한 문제는 1 일 이상 로그인 할 수있는 사용자가 있기 때문에 25 시간 세션 동안 추가 시간을 고려하는 것이 가장 좋은 경우입니다. 특정 사용자에 대해 매시간 또는 테이블의 다른 식별자를 집계 할 것입니다. 이것은 몇 십만 회의 세션을 포함 할 수 있습니다. – efess