Mysql 과 명령을 받긴 어려움을 겪고 있는 I want to do.
SELECT a.timestamp, name, count(b.name)
FROM time a, id b
WHERE a.user = b.user
AND a.id = b.id
AND b.name = 'John'
AND a.timestamp BETWEEN '2010-11-16 10:30:00' AND '2010-11-16 11:00:00'
GROUP BY a.timestamp
이는 현재 내 출력입니다 발표했다.
timestamp name count(b.name)
------------------- ---- -------------
2010-11-16 10:32:22 John 2
2010-11-16 10:35:12 John 7
2010-11-16 10:36:34 John 1
2010-11-16 10:37:45 John 2
2010-11-16 10:48:26 John 8
2010-11-16 10:55:00 John 9
2010-11-16 10:58:08 John 2
5 분 간격) 으로 그룹화합니다 결과를 어떻게 합니까?
I want to be like my 출력입니다
timestamp name count(b.name)
------------------- ---- -------------
2010-11-16 10:30:00 John 2
2010-11-16 10:35:00 John 10
2010-11-16 10:40:00 John 0
2010-11-16 10:45:00 John 8
2010-11-16 10:50:00 John 0
2010-11-16 10:55:00 John 11
모든 간격을 함께 사용할 수 있습니다.
<! - 모든 언어: > 언어 sql -;
SELECT
TIMESTAMP WITH TIME ZONE 'epoch' +
INTERVAL '1 second' * round(extract('epoch' from timestamp) / 300) * 300 as timestamp,
name,
count(b.name)
FROM time a, id
WHERE …
GROUP BY
round(extract('epoch' from timestamp) / 300), name
< br>;
SELECT
timestamp, -- not sure about that
name,
count(b.name)
FROM time a, id
WHERE …
GROUP BY
UNIX_TIMESTAMP(timestamp) DIV 300, name
, 에 대한 보다 쉽고 정확한 postgres I found to use the
[date_trunc] [1]
[1]: http://www.postgresql.org/docs/current/static/functions-datetime.html # 총괄하였습니다 datetime 트런스
다음과 같은 함수
select name, sum(count), date_trunc('minute',timestamp) as timestamp
FROM table
WHERE xxx
GROUP BY name,date_trunc('minute',timestamp)
ORDER BY timestamp
& # 39, & # 39 와 같은 다양한 해상도를 제공할 수 있습니다,, # 39, & # 39 minute& hour& # 39 day& # 39;;; 상술합니다. 를 date_trunc.
스트라이프하지 왔는지 같은 문제를 해결할 수 있습니다.
I found 용이한 것도 그룹순 어떤 분 간격이
SELECT COUNT(*) cnt,
to_timestamp(floor((extract('epoch' from timestamp_column) / 300 )) * 300)
AT TIME ZONE 'UTC' as interval_alias
FROM TABLE_NAME GROUP BY interval_alias
< /code>;
< pre>; interval_alias cnt
이 분 간격, 데이터 반환되므로 제대로 그룹순 선택한 그러나, 모든 데이터를 포함하고 있는 t # 39 don& 간격이 반환하지 않습니다. 그 빈 간격으로 얻기 위해 generate_series 기능을 사용할 수 있습니다.
< code>;
SELECT generate_series(MIN(date_trunc('hour',timestamp_column)),
max(date_trunc('minute',timestamp_column)),'5m') as interval_alias FROM
TABLE_NAME
16-11-2010 00 10 30 16-11-2010 10 35 00 16-11-2010 10 40 00 16-11-2010 00 10 45 16-11-2010 10 50 00 16-11-2010 00 10 55 < /pre>;
그 결과 지금 우리는 그냥 결과 세트를 모두 가입할 수 있는 외부 발생 없이 간격을 .
< code>;
SELECT series.minute as interval, coalesce(cnt.amnt,0) as count from
(
SELECT count(*) amnt,
to_timestamp(floor((extract('epoch' from timestamp_column) / 300 )) * 300)
AT TIME ZONE 'UTC' as interval_alias
from TABLE_NAME group by interval_alias
) cnt
RIGHT JOIN
(
SELECT generate_series(min(date_trunc('hour',timestamp_column)),
max(date_trunc('minute',timestamp_column)),'5m') as minute from TABLE_NAME
) series
켜짐이 세리스트미노티 = cnt.interval_alias
< /code>; 그 결과 5 분 간격으로 값이 없는 경우에도 시리즈는 모두 포함된다. < pre>; 간격 카운트입니다
시간 간격까지입니다 마지막 매개 generate_series 조정하여 쉽게 변경할 수 있습니다. # 39 의 경우, 우리가 사용하는 & # 39, 모든 간격을 우리가 원하는 것은 5m& 걸릴 수 있다.
아마도 헤어지고, re you& # 39 에 너회의 시간스탬프와 이마드 hm 및 사용 할 것입니다 (분) 에 5 분 5 위로 장치함 - div 분할하려면 같은 일이
select year(a.timestamp),
month(a.timestamp),
hour(a.timestamp),
minute(a.timestamp) DIV 5,
name,
count(b.name)
FROM time a, id b
WHERE a.user = b.user AND a.id = b.id AND b.name = 'John'
AND a.timestamp BETWEEN '2010-11-16 10:30:00' AND '2010-11-16 11:00:00'
GROUP BY year(a.timestamp),
month(a.timestamp),
hour(a.timestamp),
minute(a.timestamp) DIV 12
.and 어졌다면 푸츠 출력물에는 클라이언트 코드가 표시되려면 the way you like it. 또는 전체를 통해 문자열을 날짜 축적할 수 있는 별도의 열이 sql concat 퍼트로린스테드, 그것이 그렇게 말씀하시다면야
select concat(year(a.timestamp), "-", month(a.timestamp), "-" ,day(a.timestamp),
" " , lpad(hour(a.timestamp),2,'0'), ":",
lpad((minute(a.timestamp) DIV 5) * 5, 2, '0'))
그 후 그룹 .and
필요할 경우 아직 확실하지 않다.
SELECT FROM_UNIXTIME(FLOOR((UNIX_TIMESTAMP(timestamp))/300)*300) AS t,timestamp,count(1) as c from users GROUP BY t ORDER BY t;
>. 19 35 00 19 35 50 4 29-10-2016 29-10-2016 >. >. 5 19 cx3-40 37 19 40 00 29-10-2016 29-10-2016 >. >. 19 (45) 45 09 19 6 29-10-2016 29-10-2016 >. >. 19 50 00 14 19 51 4 29-10-2016 29-10-2016 >. >. 19 (55) 19 56 17 1 29-10-2016 29-10-2016
난 아마 다음 MySQL 과 올바른 질의입니다 있다는 것을 밝혀냈다.
SELECT SUBSTRING( FROM_UNIXTIME( CEILING( timestamp /300 ) *300,
'%Y-%m-%d %H:%i:%S' ) , 1, 19 ) AS ts_CEILING,
SUM(value)
FROM group_interval
GROUP BY SUBSTRING( FROM_UNIXTIME( CEILING( timestamp /300 ) *300,
'%Y-%m-%d %H:%i:%S' ) , 1, 19 )
ORDER BY SUBSTRING( FROM_UNIXTIME( CEILING( timestamp /300 ) *300,
'%Y-%m-%d %H:%i:%S' ) , 1, 19 ) DESC
Let me know what you think.
select
CONCAT(CAST(CREATEDATE AS DATE),' ',datepart(hour,createdate),':',ROUNd(CAST((CAST((CAST(DATEPART(MINUTE,CREATEDATE) AS DECIMAL (18,4)))/5 AS INT)) AS DECIMAL (18,4))/12*60,2)) AS '5MINDATE'
,count(something)
from TABLE
group by CONCAT(CAST(CREATEDATE AS DATE),' ',datepart(hour,createdate),':',ROUNd(CAST((CAST((CAST(DATEPART(MINUTE,CREATEDATE) AS DECIMAL (18,4)))/5 AS INT)) AS DECIMAL (18,4))/12*60,2))