【问题标题】:Mysql and Perl using INTERVAL to calculate a totalMysql 和 Perl 使用 INTERVAL 计算总计
【发布时间】:2011-11-13 04:39:24
【问题描述】:

谢谢你的例子。我很难找出带有间隔的语句...... 我需要在一定的日期间隔内计算用户,但间隔必须由用户输入。示例:从 '2010/05/05' 到 '2010/30/07' 如果间隔是 1m(月),那么每个 1m 间隔的用户总数,例如:2010/05/05 到 2010/06/05 是用户总数。 到目前为止,我得到了:

SELECT col1, client, COUNT(client) FROM table1, table2 WHERE col1 IN (condition) AND  date BETWEEN '2010/05/01' AND '2010/07/30' AND DATE_ADD(CURDATE(),INTERVAL + 1  month) GROUP BY client;

当然它会计算所有总数,但不计算带间隔的日期。

我也尝试过使用 Perl

my @data; #data from dbase.
%date_hash = ($data[1] =>$total);  #$data[1] is beg and  end dates user entered 
foreach  $dates (values %date_hash) {
    $date_hash{$dates}=$total;   
    print "Print hash:  $dates        $date_hash{$dates} \n"

提前谢谢你,:)

【问题讨论】:

    标签: mysql perl date intervals


    【解决方案1】:

    一种可能的仅限 SQL 的解决方案(我将提供一种算法,而不是确切的 SQL 代码)

    • 创建一个临时表INTERVALS,用以下数据填充它(可能最容易在循环中从 Perl 执行,尽管 MYSQL 循环就足够了)(从 2010 年 5 月 5 日到 2010 年 12 月 10 日,1月间隔):

      | start_period | end_period | interval_number |
      ===============================================
      | 2010/05/05   | 2010/06/04 | 1               |
      | 2010/06/05   | 2010/07/04 | 2               |
      | ...
      | 2010/12/05   | 2010/12/10 | 8               |
      
    • 然后,运行查询将您的表连接到 INTERVALS 临时表通过

       SELECT client, COUNT(client)
            , i.interval_number, i.start_period, i.end_period
       FROM table1 
       WHERE col1 IN (condition)
       AND table1.date >= inetrvals.start_period
       AND table1.date <= inetrvals.end_period
       GROUP BY client, i.interval_number, i.start_period, i.end_period
      

      请注意,您可以从 table1 中选择其他列,但前提是您也可以对它们进行分组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-30
      • 1970-01-01
      • 2014-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多