Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python:mysql:未找到行时返回0_Python_Mysql_Null - Fatal编程技术网

python:mysql:未找到行时返回0

python:mysql:未找到行时返回0,python,mysql,null,Python,Mysql,Null,表结构-5分钟插槽的数据显示- 数据点|点|日期 12 | 00:00 14 | 00:05 23 | 00:10 10 | 00:15 43 | 00:25 10 | 00:40 当我运行查询时,比如说30分钟。如果数据存在,我将得到6行(每5分钟一行)。简单查询- 选择数据点 从一些表格中 其中,点日期>=开始日期 和点日期=开始日期 和点日期=开始日期 和点日期

表结构-5分钟插槽的数据显示-

数据点|点|日期 12 | 00:00
14 | 00:05
23 | 00:10
10 | 00:15
43 | 00:25
10 | 00:40

当我运行查询时,比如说30分钟。如果数据存在,我将得到6行(每5分钟一行)。简单查询-

选择数据点
从一些表格中
其中,点日期>=开始日期
和点日期<结束日期
按点\日期订购

现在,当我没有特定时段的条目时(例如缺少时段
00:20
),我希望“数据点”返回为0

当没有返回行时,REPLACE、IF、IFNULL、ISNULL不起作用

我原以为使用默认值的联合会起作用,但它也失败了,或者我没有正确地使用它

有没有办法只通过sql来实现这一点


注意:Python 2.6和mysql 5.1版

我认为没有简单的方法可以凭空创建不存在的记录,但是您可以自己创建一个包含您感兴趣的所有时间戳的point_dates表,并在数据上加入它:

选择pd.slot,如果为空(数据点,0)
从P点开始
在st.point\U date=pd.slot上左连接一些表st
其中点日期>=开始日期
和点日期<结束日期

按点日期排序

我认为没有简单的方法可以凭空创建不存在的记录,但您可以自己创建一个点日期表,其中包含您感兴趣的所有时间戳,并在数据上加入它:

选择pd.slot,如果为空(数据点,0)
从P点开始
在st.point\U date=pd.slot上左连接一些表st
其中点日期>=开始日期
和点日期<结束日期

按点排序日期

您无法查询您没有的数据

你(作为一个有思想的人)可以声称00:20的数据丢失了;但在某种更正式的SQL意义上,没有简单的方法来定义“缺失”

最好是创建一个包含所有预期时间的表


然后,您可以在预期时间(包括0表示00:20)和实际时间(缺少00:20示例)之间进行外部联接,您将得到您预期的结果。

您无法查询您没有的数据

你(作为一个有思想的人)可以声称00:20的数据丢失了;但在某种更正式的SQL意义上,没有简单的方法来定义“缺失”

最好是创建一个包含所有预期时间的表


然后,您可以在预期时间(包括0表示00:20)和实际时间(缺少00:20示例)之间进行外部联接,您将得到您所期望的结果。

是的,您只能使用SQL来实现。解决方案是使用存储的例程。下面的存储过程产生以下输出:

start   cnt
00:05:00   1
00:10:00   0
00:15:00   1
00:20:00   0
00:25:00   1
00:30:00   0
00:35:00   1
00:40:00   0
00:45:00   0
00:50:00   0
00:55:00   2
我使用的表格

CREATE TABLE `timedata` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `c1` datetime DEFAULT NULL,
  `c2` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
)
这里是存储过程(根据您的环境进行调整):

如果将上述内容保存到名为“per5minproc.sql”的文件中,则可以按如下方式加载:

shell> mysql -uroot test < per5minproc.sql
上述解决方案可行,但可能需要一些调整,例如dtStart可以是SP的参数。
而且,它确实都是SQL

是的,您只能使用SQL来完成。解决方案是使用存储的例程。下面的存储过程产生以下输出:

start   cnt
00:05:00   1
00:10:00   0
00:15:00   1
00:20:00   0
00:25:00   1
00:30:00   0
00:35:00   1
00:40:00   0
00:45:00   0
00:50:00   0
00:55:00   2
我使用的表格

CREATE TABLE `timedata` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `c1` datetime DEFAULT NULL,
  `c2` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
)
这里是存储过程(根据您的环境进行调整):

如果将上述内容保存到名为“per5minproc.sql”的文件中,则可以按如下方式加载:

shell> mysql -uroot test < per5minproc.sql
上述解决方案可行,但可能需要一些调整,例如dtStart可以是SP的参数。
而且,它确实都是SQL

上面的存储过程制作得很快,因此可能会有一些错误。。但这可能会让你走!上面的存储过程制作得很快,因此可能会有一些错误。。但这可能会让你走!