我正在使用图表报告进行以下选择。 MySQL 数据库只有数据库中的事件记录,因此如果从 X 小时到 Y 小时数据库中没有记录,则 select 不会返回任何内容。因此,就我而言,即使数据库中没有事件,我也需要选择返回 Paypal 零值。而且我不明白如何使用 UNION 函数或重新创建 select 以便在时间间隔内数据库中没有记录任何内容的情况下获取零值。你能帮忙吗?
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')
当我运行选择时,输出是:
但是我需要如果 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')
as '#date', count( paymentmethod) as 活跃付费帐户
来自 radacct_history 其中 paymentmethod
<> 'PayPal'
按 DATE_FORMAT(#date
,'%y-%m-%d %H')) 分组
联合所有
(选择 STR_TO_DATE ( DATE_FORMAT(acctstarttime
,'%y-%m-%d %H'),'%y-%m-%d %H')
as '#date',0 为活跃付费帐户
来自 radacct_history 其中 paymentmethod
<> 'PayPal'
按 DATE_FORMAT(#date
,'%y-%m-%d %H')) 进行分组;
最佳答案
我猜,如果 MySQL 中没有匹配的行,您想返回 0。这是一个例子:
(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
关于mysql - 如果在时间间隔内没有写入任何内容,如何返回零值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39492308/