2016-09-14 2 views
0

Я использую отчеты графа для выбора ниже. База данных MySQL содержит только активные записи в базе данных, поэтому, если в базе данных нет записей с X часов до Y часов, которые выбирают, они ничего не возвращают. Поэтому в моем случае мне нужно, чтобы выбор возвращал значения Paypal нулевые, а также никакой активности в базе данных. И я не понимаю, как использовать функцию UNION или заново создать выбор, чтобы получить нулевые значения, если в базе данных не было зафиксировано ни одного времени. Не могли бы вы помочь?Как вернуть нулевые значения, если ничего не было записано в интервале времени?

select STR_TO_DATE (DATE_FORMAT(`acctstarttime`,'%y-%m-%d %H'),'%y-%m-%d %H') 
as '#date', count(*) as `Active Paid Accounts` 
from radacct_history where `paymentmethod` = 'PayPal' 
group by DATE_FORMAT(`#date`,'%y-%m-%d %H') 

При запуске выберите выход:

Current Output

Но мне нужно, если нет значения между 2016-07-27 07:00:00 и 2016-07-28 11:00:00, то в каждый час он должен показывать ноль активных счетов так:

Needed output with no values every hour

я создал такие выберите ниже, но это не ставьте на каждый час нулевое значение, как мне нужно. показывая большой зазор между 12 Sep и 13 Sep в любом случае, но должны быть нулевые значения каждый час

(выберите STR_TO_DATE (DATE_FORMAT (acctstarttime, '% y-% m-% d% H'), '% Y-% m-% d% Н ') как '#date', граф (PaymentMethod) в качестве Active Paid Accounts
от radacct_history где paymentmethod <> 'PayPal' группа по DATE_FORMAT (#date,' % Y-% m-% d% H ')) union ALL (выберите STR_TO_DATE (DATE_FORMAT (acctstarttime,'% y-% m-% d% H '),'% y-% m-% d% H ') as' #date ', 0 as Active Paid Accounts
от radacct_histo ry где paymentmethod <> 'PayPal' группа DATE_FORMAT (#date, '% y-% m-% d% H'));

+1

Пример данных и желаемого результата будет очень полезен для получения соответствующего ответа в ближайшее время. – Susang

+0

Я загрузил выходы в свой ответ. –

ответ

1

Я думаю, вы хотите вернуть 0, если в MySQL нет соответствующих строк. Вот пример:

(SELECT Col1,Col2,Col3 FROM ExampleTable WHERE ID='1234') 
UNION (SELECT 'Def Val' AS Col1,'none' AS Col2,'' AS Col3) LIMIT 1; 

Обновленный пост: Вы пытаетесь получить данные, которые не присутствуют в таблице, я думаю, со ссылкой на выходе при условии. Поэтому в этом случае вам необходимо сохранить таблицу дат, чтобы отобразить дату, которая отсутствует в таблице. Пожалуйста, обратитесь к этому, и это немного сложно - SQL query that returns all dates not used in a table

+0

Спасибо, но этот образец не возвращает нули –

+0

Пожалуйста, проверьте приведенную мной ссылку. Надеюсь, это поможет вам понять. –

0

Вам нужен искусственный стол со всеми необходимыми временными интервалами. Например. если вам нужны ежедневные данные, создайте таблицу и добавьте даты всего дня, например. начинаются с 1970 года по 2100 год.

Затем вы можете использовать таблицу и ПОЛЕЗНАТЬ свою версию radacct_history. Таким образом, для каждого желаемого интервала у вас будет элемент группы (группа должна быть основана на таблице интервалов.