如果缺少某些数据,Postgres将自动使用先前的值进行插入

编码器

我有日期范围的数据,某些日期不会持续几天,在丢失的窗口中,我只想插入以前的数据。

有没有办法在自我插入数据的过程中解决这个问题

例如

create table foo (ID VARCHAR(10), foo_count int, actual_date date);
insert into foo ( values('234534', 100, '2017-01-01'),('234534', 200, '2017-01-02'));   
insert into foo ( values('234534', 300, '2017-01-03') );
insert into foo ( values('234534', 300, '2017-01-08') );

在最后一次插入之后,我可以确保先前的数据已生成

所以应该看起来像这样

 ID        | foo_count       | actual_date
-----------+-----------------+------------
 234534    | 100             | 2017-01-01
 234534    | 200             | 2017-02-01
 234534    | 300             | 2017-03-01
 234534    | 300             | 2017-04-01
 234534    | 300             | 2017-05-01
 234534    | 300             | 2017-06-01
 234534    | 180             | 2017-07-01

我正在使用JPA插入它,当前我查询表并在表中查看当前日期并填充缺少的数据

男装

我会考虑一个更好的INSERT陈述。SELECT语句插入将使事情变得容易。SELECT语句可用于生成请求的日期序列。

INSERT INTO foo
SELECT
    --<advanced query>

但是,我想这不可能简单地完成,因为您不是直接使用JDBC或想使用本机查询来插入数据。

在这种情况下,您可以将触发器安装到数据库中,这可以起到神奇的作用:

演示:db <>小提琴

触发功能:

CREATE FUNCTION insert_missing()
    RETURNS TRIGGER AS
$$
DECLARE
    max_record record;
BEGIN
    SELECT                                                       -- 1
        id,
        foo_count,
        actual_date
    FROM
        foo
    ORDER BY actual_date DESC
    LIMIT 1
    INTO max_record;

    IF (NEW.actual_date - 1 > max_record.actual_date) THEN       -- 2
        INSERT INTO foo
        SELECT 
            max_record.id,
            max_record.foo_count,
            generate_series(max_record.actual_date + 1, NEW.actual_date - 1,  interval '1 day');  -- 3
    END IF;

    RETURN NEW;
END;
$$ language 'plpgsql';
  1. 查询当前最大日期的记录。
  2. 如果最长日期比新日期早一天以上...
  3. ...插入一个日期系列(从当前最大日期之后的日期到新日期之前的日期)。可以使用生成generate_series()

然后创建ON BEFORE INSERT触发器:

CREATE TRIGGER insert_missing
  BEFORE INSERT
  ON foo
  FOR EACH ROW
  EXECUTE PROCEDURE insert_missing();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如果某些值为null,如何进行SQL插入

来自分类Dev

如果缺少值,SQL插入

来自分类Dev

插入缺少数据的行并进行插值

来自分类Dev

如果序列数据为空,则插入自动值

来自分类Dev

如果某些为空,如何插入值

来自分类Dev

将自动生成的值插入具有特定模式的列

来自分类Dev

将自动递增变量名插入数据库

来自分类Dev

如果某些数据相同,如何使用触发器插入数据

来自分类Dev

为缺少的列值Postgres插入零值行

来自分类Dev

如果没有某些特定值,则对数据框列中的行进行计数

来自分类Dev

使用select Postgres插入值

来自分类Dev

如果列之一是使用准备好的语句自动递增,如何在mysql数据库中插入值

来自分类Dev

如果缺少字符串,如何插入括号和值?

来自分类Dev

如果两个值有不同的数据类型,Java将自动提升值的一到两种数据类型的大?

来自分类Dev

使用插入符号创建训练和测试数据时缺少值

来自分类Dev

使用插入符号创建训练和测试数据时缺少值

来自分类Dev

如果postgres中的autocommit为false,事务将自动回滚

来自分类Dev

Python - 如果更新的值大于其先前的值,则自动从 json 文件打印一个值

来自分类Dev

MySQL中的列应自动对插入的值进行哈希处理(使用Hibernate和Java)

来自分类Dev

使用循环将自动值添加到数组中

来自分类Dev

如果具有多个插入值的查询失败,那么先前的值会怎样?

来自分类Dev

当前正在计算此页面上的某些数据,并且该页面将自动刷新

来自分类Dev

从数据框python中的某些位置删除缺少值的行

来自分类Dev

根据Access(2013)中的布尔值将自动图文集(或Quickpart)插入Word(2013)

来自分类Dev

将自动增量键插入SQL Server Compact数据库

来自分类Dev

在数据框中插入缺少的时间观测值

来自分类Dev

使用与WITH绑定的值插入数据

来自分类Dev

使用与WITH绑定的值插入数据

来自分类Dev

MySQL:如果存在值,则对行进行更新,如果值不存在,则进行插入

Related 相关文章

  1. 1

    如果某些值为null,如何进行SQL插入

  2. 2

    如果缺少值,SQL插入

  3. 3

    插入缺少数据的行并进行插值

  4. 4

    如果序列数据为空,则插入自动值

  5. 5

    如果某些为空,如何插入值

  6. 6

    将自动生成的值插入具有特定模式的列

  7. 7

    将自动递增变量名插入数据库

  8. 8

    如果某些数据相同,如何使用触发器插入数据

  9. 9

    为缺少的列值Postgres插入零值行

  10. 10

    如果没有某些特定值,则对数据框列中的行进行计数

  11. 11

    使用select Postgres插入值

  12. 12

    如果列之一是使用准备好的语句自动递增,如何在mysql数据库中插入值

  13. 13

    如果缺少字符串,如何插入括号和值?

  14. 14

    如果两个值有不同的数据类型,Java将自动提升值的一到两种数据类型的大?

  15. 15

    使用插入符号创建训练和测试数据时缺少值

  16. 16

    使用插入符号创建训练和测试数据时缺少值

  17. 17

    如果postgres中的autocommit为false,事务将自动回滚

  18. 18

    Python - 如果更新的值大于其先前的值,则自动从 json 文件打印一个值

  19. 19

    MySQL中的列应自动对插入的值进行哈希处理(使用Hibernate和Java)

  20. 20

    使用循环将自动值添加到数组中

  21. 21

    如果具有多个插入值的查询失败,那么先前的值会怎样?

  22. 22

    当前正在计算此页面上的某些数据,并且该页面将自动刷新

  23. 23

    从数据框python中的某些位置删除缺少值的行

  24. 24

    根据Access(2013)中的布尔值将自动图文集(或Quickpart)插入Word(2013)

  25. 25

    将自动增量键插入SQL Server Compact数据库

  26. 26

    在数据框中插入缺少的时间观测值

  27. 27

    使用与WITH绑定的值插入数据

  28. 28

    使用与WITH绑定的值插入数据

  29. 29

    MySQL:如果存在值,则对行进行更新,如果值不存在,则进行插入

热门标签

归档