Oracle SQL 按日期查找唯一 ID
Oracle SQL find unique id by date
专家您好,
我是 运行 Windows 上的 Oracle 12c。
我已查询以查找任何新 ID 及其输入日期。我想知道您将如何更改查询以将确切日期作为搜索的一部分,而不是仅扫描 table 上的所有日期记录。
我的查询:
select carid, inventory_date from car_source t where not exists
(select carid from car_source t2 where t.carid = t2.carid and t.inventory_date != t2.inventory_date);
Table 建造:
CREATE TABLE "CAR_SOURCE"
( "COUNT_CARS" NUMBER(10,0),
"EQUIPMENT_TYPE" VARCHAR2(100 BYTE),
"LOCATION" VARCHAR2(500 BYTE),
"INVENTORY_DATE" DATE,
"COUNT_INVENTORY" VARCHAR2(3000 BYTE),
"CARID" VARCHAR2(20 BYTE)
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS" ;
插入行:
Insert into CAR_SOURCE (COUNT_CARS,EQUIPMENT_TYPE,LOCATION,INVENTORY_DATE,COUNT_INVENTORY,CARID) values (3,'Trans AM','London',to_date('04-JUL-19','DD-MON-RR'),null,'0001');
Insert into CAR_SOURCE (COUNT_CARS,EQUIPMENT_TYPE,LOCATION,INVENTORY_DATE,COUNT_INVENTORY,CARID) values (5,'Chevy Volt','London',to_date('30-AUG-19','DD-MON-RR'),null,'0002');
Insert into CAR_SOURCE (COUNT_CARS,EQUIPMENT_TYPE,LOCATION,INVENTORY_DATE,COUNT_INVENTORY,CARID) values (6,'Trans AM','coventry',to_date('07-SEP-19','DD-MON-RR'),null,'0001');
Insert into CAR_SOURCE (COUNT_CARS,EQUIPMENT_TYPE,LOCATION,INVENTORY_DATE,COUNT_INVENTORY,CARID) values (5,'Chevy Volt','coventry',to_date('02-SEP-19','DD-MON-RR'),null,'0002');
Insert into CAR_SOURCE (COUNT_CARS,EQUIPMENT_TYPE,LOCATION,INVENTORY_DATE,COUNT_INVENTORY,CARID) values (8,'Rovers','coventry',to_date('07-SEP-19','DD-MON-RR'),null,'0003');
Insert into CAR_SOURCE (COUNT_CARS,EQUIPMENT_TYPE,LOCATION,INVENTORY_DATE,COUNT_INVENTORY,CARID) values (9,'Jaguars','coventry',to_date('07-SEP-19','DD-MON-RR'),null,'0004');
Insert into CAR_SOURCE (COUNT_CARS,EQUIPMENT_TYPE,LOCATION,INVENTORY_DATE,COUNT_INVENTORY,CARID) values (7,'Rovers','London',to_date('30-AUG-19','DD-MON-RR'),null,'0003');
Insert into CAR_SOURCE (COUNT_CARS,EQUIPMENT_TYPE,LOCATION,INVENTORY_DATE,COUNT_INVENTORY,CARID) values (10,'Escalade','London',to_date('17-SEP-19','DD-MON-RR'),null,'0005');
Insert into CAR_SOURCE (COUNT_CARS,EQUIPMENT_TYPE,LOCATION,INVENTORY_DATE,COUNT_INVENTORY,CARID) values (12,'Mustangs','London',to_date('11-SEP-19','DD-MON-RR'),null,'0006');
Insert into CAR_SOURCE (COUNT_CARS,EQUIPMENT_TYPE,LOCATION,INVENTORY_DATE,COUNT_INVENTORY,CARID) values (2,'Trans AM','Brummy',to_date('20-SEP-19','DD-MON-RR'),null,'0001');
Insert into CAR_SOURCE (COUNT_CARS,EQUIPMENT_TYPE,LOCATION,INVENTORY_DATE,COUNT_INVENTORY,CARID) values (5,'Limo','London',to_date('12-SEP-19','DD-MON-RR'),null,'0007');
Insert into CAR_SOURCE (COUNT_CARS,EQUIPMENT_TYPE,LOCATION,INVENTORY_DATE,COUNT_INVENTORY,CARID) values (2,'Lambo','Essex',to_date('19-SEP-19','DD-MON-RR'),null,'0008');
Insert into CAR_SOURCE (COUNT_CARS,EQUIPMENT_TYPE,LOCATION,INVENTORY_DATE,COUNT_INVENTORY,CARID) values (1,'Limo','London',to_date('19-SEP-19','DD-MON-RR'),null,'0007');
Insert into CAR_SOURCE (COUNT_CARS,EQUIPMENT_TYPE,LOCATION,INVENTORY_DATE,COUNT_INVENTORY,CARID) values (2,'Chevy Volt','London',to_date('19-SEP-19','DD-MON-RR'),null,'0002');
结果:
- carid 日期
0004 07-SEP-19
0005 2019 年 9 月 17 日
0006 19 年 9 月 11 日
0008 2019 年 9 月 19 日
假设我想查询特定日期“19-SEP-19”,我是否会为第一个查询创建别名并将其加入第二个日期查询?
关于如何将其整合在一起的任何建议都会非常有帮助。
最亲切的问候,
吉莉
如果要查找在特定日期输入的 ID,可以使用聚合:
select car_id
from car_source
group by car_id
having min(inventory_date) = date '2019-09-19';
如果您想要 table 中的所有记录,EXISTS
很有用。但是,如果您只想在该日期首次输入 car_id
,则聚合是一种简单的方法。
专家您好,
我是 运行 Windows 上的 Oracle 12c。 我已查询以查找任何新 ID 及其输入日期。我想知道您将如何更改查询以将确切日期作为搜索的一部分,而不是仅扫描 table 上的所有日期记录。 我的查询:
select carid, inventory_date from car_source t where not exists
(select carid from car_source t2 where t.carid = t2.carid and t.inventory_date != t2.inventory_date);
Table 建造:
CREATE TABLE "CAR_SOURCE"
( "COUNT_CARS" NUMBER(10,0),
"EQUIPMENT_TYPE" VARCHAR2(100 BYTE),
"LOCATION" VARCHAR2(500 BYTE),
"INVENTORY_DATE" DATE,
"COUNT_INVENTORY" VARCHAR2(3000 BYTE),
"CARID" VARCHAR2(20 BYTE)
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS" ;
插入行:
Insert into CAR_SOURCE (COUNT_CARS,EQUIPMENT_TYPE,LOCATION,INVENTORY_DATE,COUNT_INVENTORY,CARID) values (3,'Trans AM','London',to_date('04-JUL-19','DD-MON-RR'),null,'0001');
Insert into CAR_SOURCE (COUNT_CARS,EQUIPMENT_TYPE,LOCATION,INVENTORY_DATE,COUNT_INVENTORY,CARID) values (5,'Chevy Volt','London',to_date('30-AUG-19','DD-MON-RR'),null,'0002');
Insert into CAR_SOURCE (COUNT_CARS,EQUIPMENT_TYPE,LOCATION,INVENTORY_DATE,COUNT_INVENTORY,CARID) values (6,'Trans AM','coventry',to_date('07-SEP-19','DD-MON-RR'),null,'0001');
Insert into CAR_SOURCE (COUNT_CARS,EQUIPMENT_TYPE,LOCATION,INVENTORY_DATE,COUNT_INVENTORY,CARID) values (5,'Chevy Volt','coventry',to_date('02-SEP-19','DD-MON-RR'),null,'0002');
Insert into CAR_SOURCE (COUNT_CARS,EQUIPMENT_TYPE,LOCATION,INVENTORY_DATE,COUNT_INVENTORY,CARID) values (8,'Rovers','coventry',to_date('07-SEP-19','DD-MON-RR'),null,'0003');
Insert into CAR_SOURCE (COUNT_CARS,EQUIPMENT_TYPE,LOCATION,INVENTORY_DATE,COUNT_INVENTORY,CARID) values (9,'Jaguars','coventry',to_date('07-SEP-19','DD-MON-RR'),null,'0004');
Insert into CAR_SOURCE (COUNT_CARS,EQUIPMENT_TYPE,LOCATION,INVENTORY_DATE,COUNT_INVENTORY,CARID) values (7,'Rovers','London',to_date('30-AUG-19','DD-MON-RR'),null,'0003');
Insert into CAR_SOURCE (COUNT_CARS,EQUIPMENT_TYPE,LOCATION,INVENTORY_DATE,COUNT_INVENTORY,CARID) values (10,'Escalade','London',to_date('17-SEP-19','DD-MON-RR'),null,'0005');
Insert into CAR_SOURCE (COUNT_CARS,EQUIPMENT_TYPE,LOCATION,INVENTORY_DATE,COUNT_INVENTORY,CARID) values (12,'Mustangs','London',to_date('11-SEP-19','DD-MON-RR'),null,'0006');
Insert into CAR_SOURCE (COUNT_CARS,EQUIPMENT_TYPE,LOCATION,INVENTORY_DATE,COUNT_INVENTORY,CARID) values (2,'Trans AM','Brummy',to_date('20-SEP-19','DD-MON-RR'),null,'0001');
Insert into CAR_SOURCE (COUNT_CARS,EQUIPMENT_TYPE,LOCATION,INVENTORY_DATE,COUNT_INVENTORY,CARID) values (5,'Limo','London',to_date('12-SEP-19','DD-MON-RR'),null,'0007');
Insert into CAR_SOURCE (COUNT_CARS,EQUIPMENT_TYPE,LOCATION,INVENTORY_DATE,COUNT_INVENTORY,CARID) values (2,'Lambo','Essex',to_date('19-SEP-19','DD-MON-RR'),null,'0008');
Insert into CAR_SOURCE (COUNT_CARS,EQUIPMENT_TYPE,LOCATION,INVENTORY_DATE,COUNT_INVENTORY,CARID) values (1,'Limo','London',to_date('19-SEP-19','DD-MON-RR'),null,'0007');
Insert into CAR_SOURCE (COUNT_CARS,EQUIPMENT_TYPE,LOCATION,INVENTORY_DATE,COUNT_INVENTORY,CARID) values (2,'Chevy Volt','London',to_date('19-SEP-19','DD-MON-RR'),null,'0002');
结果:
- carid 日期 0004 07-SEP-19 0005 2019 年 9 月 17 日 0006 19 年 9 月 11 日 0008 2019 年 9 月 19 日
假设我想查询特定日期“19-SEP-19”,我是否会为第一个查询创建别名并将其加入第二个日期查询? 关于如何将其整合在一起的任何建议都会非常有帮助。 最亲切的问候, 吉莉
如果要查找在特定日期输入的 ID,可以使用聚合:
select car_id
from car_source
group by car_id
having min(inventory_date) = date '2019-09-19';
如果您想要 table 中的所有记录,EXISTS
很有用。但是,如果您只想在该日期首次输入 car_id
,则聚合是一种简单的方法。