Oracle SQL находит уникальный идентификатор по дате - PullRequest
0 голосов
/ 22 октября 2019

Здравствуйте, эксперты ,

Я использую Oracle 12c в Windows. Я сделал запрос, чтобы найти любые новые идентификаторы и дату, когда они были введены. Я хотел знать, как вы изменили бы запрос, чтобы включить в поиск точную дату, а не просто сканировать все записи даты в таблице. Мой запрос:

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); 

Сборка таблицы:

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 DATE0004 07-СЕНТЯБРЯ-19 0005 17-СЕНТЯБРЯ-19 0006 11-СЕНТЯБРЯ-19 0008 19-СЕНТЯБРЯ 19

Допустим, я хотел запросить определенную дату '19 -SEP-19 'Могу ли я создать псевдоним для первого запроса и присоединить его ко второму запросу даты? Любой совет о том, как собрать это воедино, будет очень полезен. С наилучшими пожеланиями, Джилли

1 Ответ

1 голос
/ 22 октября 2019

Если вы хотите найти идентификаторы, введенные на определенную дату, вы можете использовать агрегирование:

select car_id
from car_source
group by car_id
having min(inventory_date) = date '2019-09-19';

EXISTS полезно, если вы хотите, чтобы все записи в таблице. Однако, если вы просто хотите, чтобы car_id s впервые вводились в эту дату, агрегирование является простым подходом.

...