pgSQL查询一段时间的操作

本文介绍如何使用SQL查询从任务表中找出创建超过五天且未工作的数据。通过LEFT JOIN操作结合子查询,实现了在保持任务完整信息的同时,区分出超过五天未工作的任务。同时,讲解了在GROUP BY语句中处理多表联接时避免错误的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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天的数据
	SELECT
	lz.* ,
	max(hf.hfsj)
FROM
	lztest lz
	LEFT JOIN hftest hf ON hf.lz_id = lz.id 
WHERE
  now() > ( 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、现在想要把所有的任务信息展示,但要区分超过五天未工作的数据

SELECT
	tab.id as xxx,
	sw.* 
	
FROM
	lztest lz 
left join(
SELECT
	lz.* ,
	max(hf.hfsj)
FROM
	lztest lz
	LEFT JOIN hftest hf ON hf.lz_id = lz.id 
WHERE
  now() > ( SELECT lz.sjrksj + '5 day' AS times )
	GROUP BY lz.id

)tab ON tab.id = lz.id

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值