pgSQL查询一段时间的操作

SELECT now()::timestamp + '1 year';  --当前时间加1年
SELECT now()::timestamp + '1 month';  --当前时间加一个月
SELECT now()::timestamp + '1 day';  --当前时间加一天
SELECT now()::timestamp + '1 hour';  --当前时间加一个小时
SELECT now()::timestamp + '1 min';  --当前时间加一分钟
SELECT now()::timestamp + '1 sec';  --加一秒钟
select now()::timestamp + '1 year 1 month 1 day 1 hour 1 min 1 sec';  --111111秒
SELECT now()::timestamp + (col || ' day')::interval FROM table --把col字段转换成天 然后相加

相关函数:
在这里插入图片描述
例子:需求是查询lztest和hftest,假定为任务表(lztest)和工作表(zftest),一对多的关系
1、查询获取数据,要求获取创建任务超过五天时未工作的数据
获取lztest表数据入库时间(sjrksj)距离现在超过五天的数据(pgSQL)

//该sql可以获取下发任务超过5天的数据SELECTlz.* ,max(hf.hfsj)
FROMlztest lzLEFT JOIN hftest hf ON hf.lz_id = lz.id 
WHEREnow() > ( SELECT lz.sjrksj + '5 day' AS times )GROUP BY lz.id

此时如果在select后加入·hf.xxx会报错
ERROR: column “hf.xxx” must appear in the GROUP BY clause or be used in an aggregate function
意思是hf.xxx字段必须在 GROUP BY 中出现或者被用于聚合函数,在group by后加入hf.xxx(这里不能显示工作表里面的信息)
2、现在想要把所有的任务信息展示,但要区分超过五天未工作的数据

SELECTtab.id as xxx,sw.* FROMlztest lz 
left join(
SELECTlz.* ,max(hf.hfsj)
FROMlztest lzLEFT JOIN hftest hf ON hf.lz_id = lz.id 
WHEREnow() > ( SELECT lz.sjrksj + '5 day' AS times )GROUP BY lz.id)tab ON tab.id = lz.id

这样就可以通过tab.id区分开,tab.id有值的是超过五天未工作的,为null的是其他情况(工作的和没有超过5天的)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部