Mysql и Perl, используя INTERVAL для расчета общего - PullRequest
0 голосов
/ 08 сентября 2011

Спасибо за пример.Мне трудно вычислить оператор с интервалом ... Мне нужно вычислить пользователей за определенный интервал дат, но интервал должен быть введен пользователем.Пример: с '2010/05/05' до '2010/30/07', если интервал составляет 1 м (месяц), то общее количество пользователей на каждый интервал 1 м, например, с 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"

Спасибозаранее, :)

1 Ответ

0 голосов
/ 08 сентября 2011

Одно возможное решение только для SQL (я предложу алгоритм, а не точный код SQL)

  • Создайте временную таблицу INTERVALS, заполните ее (вероятно, проще всего сделать из Perl вцикл, хотя MYSQL цикл будет достаточным) с данными следующим образом (с 5/5/2010 по 12/10/2010, с интервалом в 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
    

    Обратите внимание, что вы можете выбрать другие столбцы из таблицы1, но только если вы сгруппируете их по ним.*

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...