最大时间的id oracle,,求ID相同的连续日期的最大值和最小值

SQL codecreate table tabname1 (id0 INT,id1 int ,month1 DATE);

insert into tabname1 values(1,1,to_date('2009-01-01','yyyy-mm-dd'));

insert into tabname1 values(1,1,to_date('2009-02-01','yyyy-mm-dd'));

insert into tabname1 values(1,1,to_date('2009-03-01','yyyy-mm-dd'));

insert into tabname1 values(1,2,to_date('2009-04-01','yyyy-mm-dd'));

insert into tabname1 values(1,2,to_date('2009-05-01','yyyy-mm-dd'));

insert into tabname1 values(1,2,to_date('2009-06-01','yyyy-mm-dd'));

insert into tabname1 values(1,1,to_date('2009-07-01','yyyy-mm-dd'));

insert into tabname1 values(1,1,to_date('2009-08-01','yyyy-mm-dd'));

insert into tabname1 values(2,1,to_date('2009-05-01','yyyy-mm-dd'));

insert into tabname1 values(2,1,to_date('2009-06-01','yyyy-mm-dd'));

insert into tabname1 values(2,3,to_date('2009-08-01','yyyy-mm-dd'));

insert into tabname1 values(2,3,to_date('2009-09-01','yyyy-mm-dd'));

insert into tabname1 values(2,4,to_date('2009-12-01','yyyy-mm-dd'));

insert into tabname1 values(2,4,to_date('2010-01-01','yyyy-mm-dd'));

select id0,id1,min(month1),max(month1)

from

(SELECT id0,id1,month1,COUNT(1) over(PARTITION BY id0,id1,dr) dr FROM

(SELECT id0,id1,

month1,

add_months(month1,- DENSE_RANK() OVER(PARTITION BY id0,id1 ORDER BY month1)) dr

FROM tabname1

)

)

group by id0,id1,dr

order by id0,id1

id0 id1 min(month1) max(month1)

--------------------

1 1 1 2009/7/1 2009/8/1

2 1 1 2009/1/1 2009/3/1

3 1 2 2009/4/1 2009/6/1

4 2 1 2009/5/1 2009/6/1

5 2 3 2009/8/1 2009/9/1

6 2 4 2009/12/1 2010/1/1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,针对你的问题,我可以为你解答一下: 对于 Oracle 数据库,一般使用序列(Sequence)来实现 id 自增。具体步骤如下: 1. 创建序列 ``` CREATE SEQUENCE sequence_name START WITH 1 INCREMENT BY 1 MAXVALUE 999999999 MINVALUE 1 NOCACHE NOCYCLE; ``` 其中,`sequence_name` 是序列名称,`START WITH` 是序列起始值,`INCREMENT BY` 是序列递增值,`MAXVALUE` 是序列最大值,`MINVALUE` 是序列最小值,`NOCACHE` 表示不使用缓存,`NOCYCLE` 表示不循环。 2. 在表中使用序列 ``` CREATE TABLE table_name ( id NUMBER(10) PRIMARY KEY, column1 VARCHAR2(50), column2 VARCHAR2(50) ); CREATE TRIGGER trigger_name BEFORE INSERT ON table_name FOR EACH ROW BEGIN SELECT sequence_name.NEXTVAL INTO :new.id FROM dual; END; ``` 其中,`table_name` 是表名,`id` 是自增字段名,`column1` 和 `column2` 是其他字段名,`trigger_name` 是触发器名称,`BEFORE INSERT ON table_name` 表示在插入数据之前触发,`FOR EACH ROW` 表示每行触发一次,`:new.id` 表示新插入数据的自增字段值。 对于 MySQL 数据库,一般使用自增主键(AUTO_INCREMENT)来实现 id 自增。具体步骤如下: 1. 创建表 ``` CREATE TABLE table_name ( id INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY, column1 VARCHAR(50), column2 VARCHAR(50) ); ``` 其中,`table_name` 是表名,`id` 是自增字段名,`column1` 和 `column2` 是其他字段名,`UNSIGNED` 表示无符号,`AUTO_INCREMENT` 表示自增。 2. 插入数据 ``` INSERT INTO table_name (column1, column2) VALUES ('value1', 'value2'); ``` 其中,`column1` 和 `column2` 是列名,`'value1'` 和 `'value2'` 是列的值,自增字段 id 会自动递增。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值