Ошибка в запросе Mysql для создания гистограммы, вероятно, в определении параметра

Я чувствую себя немного раздраженным, когда спрашиваю об этом, но будет ли кто-то так любезен, чтобы устранить недостаток в этом коде? Мой MySQL-сервер не понимает этот запрос.

Это часть большого php-mysql-javascript, где пользователь определяет, насколько большим должен быть один гистограммбар. В этом случае бар 5 дней. Числа между " " вычисляются переменными $ php-скриптом до того, как запрос будет представлен движку базы данных.

brontabel - это таблица, состоящая из двух столбцов gendate и datum1. Gendate - это время, когда таблица генерируется другими запросами. Tijd обозначает дату покупки товара. Мне было бы далеко объяснить, почему, но в бронтабеле есть более одного жандата.

Мне важно сказать, что я не ИТ-специалист. Я делаю этот сценарий, чтобы объяснить IT-сервису моей компании, что мне нужно. Таким образом, они могут переписать / улучшить программу на более элегантном языке, таком как R или что-то в этом роде. (Чтобы разработать то, что я хочу с нуля, им нужно много статистических знаний о негауссовых дистрибутивах)

Поэтому, пожалуйста, дайте решение, которое я могу понять! Некоторые из вопросов в вопросе "MySQL: получение данных для гистограммы?" дай мне мозговое срыв:-)

SELECT
    gendate,
    tijd,
    SUM(CASE 
            WHEN (gendate - datum1) >= (tijd - " 5 " ) 
                 AND (gendate - datum1) < tijd 
            THEN 1 ELSE 0 END) AS aantal, 
    SUM(CASE  
            WHEN (gendate - datum1) >= tijd 
            THEN 1 ELSE 0 END)  AS rest,
    (SUM(CASE  
            WHEN (gendate - datum1) >= tijd 
            THEN 1 ELSE 0 END) * 100/count(*))  AS percentage_erna_actief 
 FROM brontabel, 
      (VALUES " 5 ", " 10 ", " 15 ", " 20 ", " 25 ", " 30 ", 
        " 35 " , " 40 ", " 45 ", " 50 ", " 55 ", " 60 ", " 65 ",
        " 70 ", " 75 ", " 80 ") AS X(tijd) 
WHERE gendate = MAX(gendate) 
GROUP BY tijd

PS Извините за растерянность Хорхе

Ват я хочу, чтобы сгенерировать гистограмму (гистограмму) всех предметов, которые куплены, но еще не отправлены. Элемент будет оставаться в таблице до тех пор, пока он не будет отправлен, чем строка удалена из таблицы брони другими запросами.

Если вы купили товар 19-11-2013 (datum1) и таблица была сгенерирована сегодня 30-11-2013, чем gendate-datum1 = 11 (товар / покупка уже ждет одиннадцать дней для отправки), поэтому планка (представленная временем =15)) будет увеличиваться с одним.

Вы получаете что-то вроде этого

gendate
время (Tijd)
активный (сколько покупок, принадлежащих этому бару, ожидает отправки) остальное (сколько покупок ожидает уже дольше, чем время (tijd) для отправки) процент_erna_actief (остаток выражается в процентах)

общее количество товаров / покупок, ожидающих отправки = 200 (200 строк в таблице)

gendate    time    active    rest    percentageernaactief
30-11      5       2         198      99%  (2 purchases are less than 5 days waiting for shipping)
30-11      10      6         192      96%  (6 purchases are between 5 and 10 days waiting for shipping)
30-11      15      12        180      90%
30-11      20      20        160      80%
30-11      25      0         160      80%
30-11      30      0         160      80%
30-11      35      40        120      60%
...

Надеюсь, что это делает это более ясным

1 ответ

Чтобы MySql понять, что вы хотите, нужно будет использовать это:

SELECT
    gendate,
    tijd,
    SUM(CASE 
            WHEN (gendate - datum1) >= (tijd - 5 ) 
                 AND (gendate - datum1) < tijd 
            THEN 1 ELSE 0 END) AS aantal, 
    SUM(CASE  
            WHEN (gendate - datum1) >= tijd 
            THEN 1 ELSE 0 END)  AS rest,
    (SUM(CASE  
            WHEN (gendate - datum1) >= tijd 
            THEN 1 ELSE 0 END) * 100/count(*))  AS percentage_erna_actief 
 FROM brontabel, 
      (select 5 tijd union select 10 union select 15 union 
       select 20 union select 25 union select 30 union
       select 35 union select 40 union select 45 union
       select 50 union select 55 union select 60 union
       select 65 union select 70 union select 75 union
       select 80) AS X
WHERE gendate = ( select MAX(gendate) from brontabel )
GROUP BY gendate, tijd

В таблице X есть нужные вам значения

И where часть получает максимальное значение от gendate Также необходимо сгруппировать по столбцам, которые не агрегированы.

Также имейте в виду, что вы делаете картезианский план, что означает, что для каждого реестра в brontabel Таблица будет умножена на количество значений на X Таблица

Другие вопросы по тегам