2011-02-23 69 views
0

我有一个关于构建MySQL查询的问题。我有一个包含值的列,另一列包含时间戳。我想要做的是从一个特定的时期到各个时间点获得一个字段的不同(唯一)值的数量,以便我可以绘制随时间变化的唯一值的数量。例如,我想查询结果如下所示:
Date,COUNT(DISTINCT col1
2011-02-01,10
2011-02-02,16
2011-02-03 ,24
随着时间的推移MySQL不同(唯一)值

请注意,这些值是开始相同时间点的不同值的数量。目前为了实现这一点,我在PHP中使用循环来为每个日期迭代单个查询,并且由于我有一个大型数据库,因此它需要永久使用。为了给出更好的图片,我想替换的低效代码如下所示:

for($i=0;$i<count($dates),$i++){  
    $qry = "SELECT COUNT (DISTINCT `col1`) FROM `db`.`table` WHERE `Date` BETWEEN '".$EPOCH."' AND '".$dates[$i]."';";  
} 

任何帮助,将不胜感激。
感谢

+0

这是老了,但留给后人,这个答案应该工作: http://stackoverflow.com/questions/10995473/cumulative-monthly-totals-and-postgresql – kimbo305 2013-06-05 04:34:36

回答

0

如果将其理解你的问题,你可以使用GROUP声明:

SELECT StampCol, COUNT(DISTINCT DataCol) FROM MyTable GROUP BY StampCol 
+0

您需要用该解决方案来确认PHP中的计数。 – Zulan 2011-02-23 17:10:10

+0

谢谢,但这个查询会给每一天的计数(我也需要不同的值)。我正在查找COUNT包含所有'DataCol'值_up直到'StampCol'的日期的查询。通过这种方式,我可以随着时间的推移跟踪唯一'DataCol'的增长,而不是每个给定'StampCol'唯一的'DataCol'。 – Tucker 2011-02-23 18:15:14

+0

是的,但是通过分组,只有一个日期组的唯一值在该日期组范围内会被视为唯一值,并且计数将会关闭 – Tucker 2011-02-23 19:01:05

0
SELECT DATE_FORMAT(date_column, "%Y-%m-%d") AS date_column, COUNT(visitors) AS visitors FROM table GROUP BY DATE_FORMAT(date_column, "%Y-%m-%d") ORDER BY date_column desc" 
+0

请参阅“如果您了解您的问题,则可以使用GROUP声明:....“ – Tucker 2011-02-23 18:16:49

相关问题