mysql - 如果在时间间隔内没有写入任何内容,如何返回零值?

标签 mysql sql gaps-and-islands

我正在使用图表报告进行以下选择。 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')

当我运行选择时,输出是:

Current Output

但是我需要如果 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/

相关文章:

php - 选择字符串中的所有字符直到特定字符 MySQL

php - Xampp 服务器中的所有 php 项目应该放在哪里?

php - CodeIgniter phpMyAdmin - 插入名称中有空格的表

sql - 复制同一表中的一行而无需键入 50 多个列名(同时更改 2 列)

MySQL LEFT JOIN ON LIKE CONCAT 通配符

mysql - 具有整数名称的列的 SQL SUM 函数

sql - 按 PostgreSQL 中的递增列对行进行分组

SQL 日期范围查询 - 表比较

mysql - 如何计算MYSQL中用户连续被标记为橙色的天数?

python - Django 说字段不存在时它确实存在