难以在图表上显示大量值

时间:2015-07-27 01:42:09

标签: sql sql-server dotnethighcharts

我正在尝试从图表上的数据库中显示一些记录。一分钟内保存的记录通常约为70条记录。这些记录在折线图上看起来很疯狂,但是当数据兴趣在四小时间隔之间时,期望用户继续请求每分钟查看记录会更加疯狂和不切实际。

我决定按分钟对记录进行分组,在那里我陷入了查询的困境。 以下是我的查询示例:

SELECT DISNTINCT YEAR(recievedon), MONTH(recievedon), DAY(recievedon), HOUR(recievedon), referenceprice
FROM dbname
WHERE recievedon >= '2015-06-05 10:30' AND recievedon <= '2015-06-05 10:50'
ORDER BY recievedon

如何使用GROUP BYDISTINCT

按分钟对记录进行分组

其次,有没有更好的方法在(线)图表中渲染大型数据集而不是对记录进行分组?

2 个答案:

答案 0 :(得分:2)

如果我猜你使用的是MySQL,那么你可以使用to_seconds()。以下给出了每分钟的平均参考价格,以及区间中第一个价格的日期/时间:

select min(recievedon), avg(referenceprice)
from dbname
where recievedon >= '2015-06-05 10:30' AND recievedon <= '2015-06-05 10:50'
group by floor(to_seconds(receivedon) / 60) 

编辑:

在SQL Server中,您可以执行以下操作:

select min(receivedon), avg(referenceprice)
from dbname
where recievedon >= '2015-06-05 10:30' AND recievedon <= '2015-06-05 10:50'
group by datediff(minute, 0, receivedon);

如果您想要期间的开头而不是之前的时间戳:

select dateadd(minute, 0, datediff(minute, 0, receivedon)) as timeperiod,
       avg(referenceprice)
from dbname
where recievedon >= '2015-06-05 10:30' AND recievedon <= '2015-06-05 10:50'
group by dateadd(minute, 0, datediff(minute, 0, receivedon)) ;

答案 1 :(得分:1)

使用DATEPART之类的简单组,而不需要考虑溢出。 SELECT与戈登的回答是一样的。

SELECT 
    MIN(ReceivedOn) AS Time,
    -- Assuming you need average price
    AVG(ReferencePrice) AS ReferencePrice
FROM
    dbname
WHERE
    ReceivedOn BETWEEN '2015-06-05 10:30' AND '2015-06-05 10:50'
GROUP BY
    DATEPART(YEAR, ReceivedOn),
    DATEPART(MONTH, ReceivedOn),
    DATEPART(DAY, ReceivedOn),
    DATEPART(HOUR, ReceivedOn),
    DATEPART(MINUTE, ReceivedOn)