谢谢你的一个例子。我很难找到一个间隔的陈述...... 我需要在特定的日期间隔内计算用户,但必须由用户输入间隔。示例:从“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"
提前谢谢你:)
答案 0 :(得分:0)
一种可能的SQL解决方案(我将提供算法,而不是确切的SQL代码)
创建一个临时表INTERVALS
,填充它(可能最容易在Perl中循环,但MYSQL循环就足够了),数据如下(从2010年5月5日到12月/ 2010年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中选择其他列,但前提是您也可以将它们分组。