1.对时间的操作:
在PostgreSQL中可以直接对时间进行加减运算:、
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'; --加1年1月1天1时1分1秒
SELECT now()::timestamp + (col || ' day')::interval FROM table --把col字段转换成天 然后相加
2.需求: 有一张学生成绩表(table_score),id, 学生id(s_id),学科id(p_id),分数(score)这么几个字段
会出现同一个学生同一个学科有多个分数, 这时候的需求是 取表记录id较大的那个筛选出来
SELECT * FROM table_score a
WHERE NOT EXISTS
(SELECT
1
FROM table_score b
WHERE a.s_id=b.s_id
AND a.p_id=b.p_id
ps:此处有个坑,如果你查的表
table_score 含有条件,比如 我只需要查学生id在 200 ~ 500 之间的学生 这个条件不能加在以上的语句中
解决方法, 将此表添加条件后作为一张临时表 替换掉以上的
table_score .
postgressql 可以 使用with语句
WITH STD_INFO AS (
select * from table_score where s_id between 200 and 500
)
SELECT * FROM STD_INFO a
WHERE NOT EXISTS
(SELECT 1 FROM STD_INFO b
WHERE a.s_id=b.s_id
AND a.p_id=b.p_id
AND a.id<b.id)