sql - mac - 표를 제때에 배포



mysql syntax (5)

이 같은 것이 내 마음에왔다.

select @rownum:[email protected]rownum+1 rownum, entries.* 
from (select @rownum:=0) r, entries 
where uid = ? and rownum % 150 = 0

내 손에 MySQL이 없지만 아마도 도움이 될 것입니다 ...

https://ffff65535.com

나는 사용자 당 약 3000 행의 MySQL 테이블을 가지고있다. 열 중 하나는 datetime 필드이며 변경할 수 있으므로 행이 시간순으로 정렬되지 않습니다.

차트에서 시간 분포를 시각화하고 싶습니다. 따라서 개별 데이터 포인트가 필요합니다. 20 datapoints 충분합니다.

나는 이것을 할 수 있었다 :

select timefield from entries where uid = ? order by timefield;

150 번째 행마다 살펴보십시오.

또는 20 개의 개별 쿼리를 수행하고 limit 1offset 사용할 limit 1 있습니다.

하지만 더 효율적인 솔루션이 있어야합니다 ...


개별 데이터 포인트에 대해 정말로 관심이 있습니까? 아니면 일일 숫자에 대한 통계 집계 함수를 사용하여 알고 싶은 것을 말해 줄 수 있습니까?


Michal Sznajder는 거의 가지고 있었지만 SQL의 WHERE 절에서 열 별칭을 사용할 수는 없습니다. 따라서 파생 테이블로 포장해야합니다. 나는 이것을 시도하고 그것을 20 행을 반환합니다 :

SELECT * FROM (
    SELECT @rownum:[email protected]rownum+1 AS rownum, e.*
    FROM (SELECT @rownum := 0) r, entries e) AS e2
WHERE uid = ? AND rownum % 150 = 0;

지금까지 시각화와 관련하여이 샘플은 사용자가 말하는 주기적 샘플링이 아니라는 것을 알고 있습니다. 그러나 사용자의 모든 행을 살펴보고 간격 버킷, 버킷 내 SUM 및 막대 그래프 또는 유사점을 선택합니다. 한 시간 내에 많은 사건이 중요 할 수 있기 때문에 이것은 실제 "분포"를 보여줄 것입니다.

SELECT DATEADD(day, DATEDIFF(day, 0, timefield), 0) AS bucket -- choose an appropriate granularity (days used here)
     ,COUNT(*)
FROM entries
WHERE uid = ?
GROUP BY DATEADD(day, DATEDIFF(day, 0, timefield), 0)
ORDER BY DATEADD(day, DATEDIFF(day, 0, timefield), 0)

또는 자신을 반복해야하는 방식이 마음에 들지 않거나 다른 버킷으로 게임을하고 3 차원으로 여러 사용자를 분석하려는 경우 (x, y, uid, 버킷에 대해 Z로 측정) :

SELECT uid
    ,bucket
    ,COUNT(*) AS measure
FROM (
    SELECT uid
        ,DATEADD(day, DATEDIFF(day, 0, timefield), 0) AS bucket
    FROM entries
) AS buckets
GROUP BY uid
    ,bucket
ORDER BY uid
    ,bucket

3D로 음모를 꾸미고 싶다면 사용자를위한 의미있는 전체 메트릭에 따라 사용자를 정렬하는 방법을 결정할 것입니다.


@ 마이 칼

어떤 이유로 든 @recnum이보다 작은 연산자를 사용하는 경우에만 예제가 작동합니다. 나는 어디에서 행을 필터링 할 때 rownum이 증가하지 않으며 다른 것과는 일치 할 수 없다고 생각합니다.

원래 테이블에 자동으로 증가 된 ID 열이 있고 행이 시간 순서대로 삽입 된 경우 다음이 작동합니다.

select timefield from entries
where uid = ? and id % 150 = 0 order by timefield;

물론 id와 timefield 사이에 아무런 상관 관계가 없다면 실제로 작동하지 않습니다.





mysql