我正在使用图表报告进行下面的选择。 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')
当我运行select时,输出为:
但是我需要2016-07-27 07:00:00和2016-07-28 11:00:00之间没有值,然后在每小时它应该显示零活跃账户这样:
Needed output with no values every hour
我在下面创建了这样的选择,但它并没有像我需要的那样每小时都放零值。显示9月12日至9月13日之间的巨大差距,但每小时应该有零值
(选择STR_TO_DATE(DATE_FORMAT(acctstarttime
,'%y-%m-%d%H'),'%y-%m-%d%H')
作为'#date',将count(paymentmethod)计为Active Paid Accounts
来自radacct_history,其中paymentmethod
<> “贝宝”
按DATE_FORMAT分组(#date
,'%y-%m-%d%H'))
联合所有
(选择STR_TO_DATE(DATE_FORMAT(acctstarttime
,'%y-%m-%d%H'),'%y-%m-%d%H')
作为'#date',0作为Active Paid Accounts
来自radacct_history,其中paymentmethod
<> “贝宝”
按DATE_FORMAT分组(#date
,'%y-%m-%d%H'));
答案 0 :(得分:1)
我想,如果MySQL中没有匹配的行,你想返回0。这是一个例子:
2016-09-14
更新了帖子:您正在尝试检索表中不存在的数据,我想参考提供的输出。因此,在这种情况下,您必须维护一个日期表以显示表中没有的日期。请参考这个,这有点棘手 - SQL query that returns all dates not used in a table
答案 1 :(得分:0)
您需要一个具有所有必要时间间隔的人工桌。例如。如果您需要每日数据,请创建一个表并添加所有日期日期,例如从1970年到2100年。
然后你可以使用表格和LEFT JOIN你的radacct_history。因此,对于每个所需的时间间隔,您将拥有组项(group by应基于时间间隔表。