python - SQL 错误:“-”不能应用于时间戳
问题描述
我正在使用以下 SQL 查询语句来计算以分钟为单位的时间差。
query_preadm_uo = """
select distinct oe.icustay_id,
date_diff('second', timestamp '1970-01-01 00:00:00', oe.charttime) as charttime,
oe.itemid, oe.value ,
60*24*date_part('day',ic.intime-oe.charttime) +
60*date_part('hour',ic.intime-oe.charttime) +
date_part('min',ic.intime-oe.charttime) as datediff_minutes
from mimiciii.outputevents oe, mimiciii.icustays ic
"""
我收到以下错误。
SYNTAX_ERROR:第 1:167 行:“-”不能应用于时间戳,时间戳无法回滚
错误在代码的以下部分。
60*24*date_part('day',ic.intime-oe.charttime) + 60*date_part('hour',ic.intime-oe.charttime) + date_part('min',ic.intime-oe.charttime) as datediff_minutes
无论如何我可以通过更正查询中的上述代码部分并编写其他一些代码来实现相同的功能来摆脱这个错误。
解决方案
更新
换了Presto
,不是PostgreSQL
。
你可以简单地使用
DATE_DIFF('minute', ic.intime, oe.charttime) AS datediff_minutes
PostgreSQL 的原始答案
您可以使用EXTRACT(EPOCH FROM ...)
将时间戳转换为时间戳和 unix 纪元之间的秒数,然后减去这些值并除以 60 以获得分钟数,即
SELECT ...
(EXTRACT(EPOCH FROM ic.intime) - EXTRACT(EPOCH FROM oe.charttime)) / 60 AS datediff_minutes
...
请注意,您也可以替换:
EXTRACT(EPOCH FROM oe.charttime) AS charttime,
为了
date_diff('second', timestamp '1970-01-01 00:00:00', oe.charttime) as charttime,
推荐阅读
- git - 解决合并冲突是否会同时修改源文件和目标文件?
- azure - 从 Azure DevOps Pipeline 加载 Az.Kusto 2.0.0 PowerShell 模块时出现问题
- branch.io - 如果未安装应用程序,Branch.io 链接不会打开应用程序商店
- ethereum - Solidity - 我部署什么版本的合约?
- c++ - C++向量构造函数实现
- github - 审计日志导出和聚合
- terraform - 使用 Terraform 在 Linux VM 上运行脚本扩展
- amazon-web-services - 部署 EKS 的 CDK 代码更新时 AssetParameters 发生变化
- node.js - 无法连接到 socket.io 服务器
- java-8 - 即使数据库实例关闭,CrudRepository 计数方法也会返回结果