oracle help help - PullRequest
       2

oracle help help

0 голосов
/ 08 сентября 2011

У меня есть следующее:

CREATE TABLE R_TEST
(
   PROJECT_ID  NUMBER,
   VERSION     NUMBER,
   READY_DATE  DATE,
   ESTATE_NO   VARCHAR2(1 BYTE)
  )
  TABLESPACE vvvvvvvvv
  PCTUSED    0
  PCTFREE    10
  INITRANS   1
  MAXTRANS   255
  STORAGE    (
        INITIAL          64K
        NEXT             1M
        MINEXTENTS       1
        MAXEXTENTS       UNLIMITED
        PCTINCREASE      0
        BUFFER_POOL      DEFAULT
       )
 LOGGING 
 NOCOMPRESS 
 NOCACHE
 NOPARALLEL
 MONITORING;
 SET DEFINE OFF;

 Insert into R_TEST
    (PROJECT_ID, VERSION, READY_DATE, ESTATE_NO)
 Values
    (1345, 1, NULL, 'a');
 Insert into R_TEST
    (PROJECT_ID, VERSION, READY_DATE, ESTATE_NO)
 Values
    (1345, 2, NULL, 'a');
 Insert into R_TEST
   (PROJECT_ID, VERSION, READY_DATE, ESTATE_NO)
 Values
   (1345, 3, TO_DATE('07/01/2011 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'a');
 Insert into R_TEST
   (PROJECT_ID, VERSION, READY_DATE, ESTATE_NO)
 Values
   (1345, 4, TO_DATE('07/29/2011 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'a');
 Insert into R_TEST
   (PROJECT_ID, VERSION, READY_DATE, ESTATE_NO)
  Values
  (1059, 1, NULL, 'b');
 Insert into R_TEST
   (PROJECT_ID, VERSION, READY_DATE, ESTATE_NO)
  Values
   (1059, 2, TO_DATE('06/27/2011 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'b');
  Insert into R_TEST
    (PROJECT_ID, VERSION, READY_DATE, ESTATE_NO)
 Values
    (2326, 1, NULL, 'b');
 Insert into R_TEST
    (PROJECT_ID, VERSION, READY_DATE, ESTATE_NO)
  Values
    (2326, 2, NULL, 'b');
 Insert into R_TEST
    (PROJECT_ID, VERSION, READY_DATE, ESTATE_NO)
 Values
    (2326, 3, TO_DATE('08/29/2011 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'b');
 Insert into R_TEST
    (PROJECT_ID, VERSION, READY_DATE, ESTATE_NO)
 Values
    (998, 1, NULL, 'c');
  Insert into R_TEST
    (PROJECT_ID, VERSION, READY_DATE, ESTATE_NO)
  Values
   (998, 2, TO_DATE('07/27/2011 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'c');
  Insert into R_TEST
    (PROJECT_ID, VERSION, READY_DATE, ESTATE_NO)
  Values
   (998, 1, NULL, 'c');
  COMMIT;

Я пытаюсь узнать, сколько активных и завершенных проектов существует на estate_no.Согласно приведенным выше данным: у меня должен быть

один завершенный проект от 27.07.2011 и один активный проект для estate_no C. Два завершенных проекта от 29.08.2011 и 27.06.2011 для estate_no B.один завершенный проект от 29.07.2011 для estate_no A.

проблема, с которой я столкнулся, состоит в том, что estate_no A имеет две даты для одного и того же project_id с 4 разными версиями.Они отметили его готовым, но поняли, что он на самом деле не готов, проделали еще какую-то работу, а затем отметили его готовым еще раз.

любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 10 сентября 2011

Вы должны выбрать строку с максимальной версией для поместья и проекта.

один способ - присоединиться к подзапросу, связывающему строки с максимальной версией:

SELECT  r_test.project_id, r_test.version, r_test.ready_date, r_test.estate_no
FROM r_test INNER JOIN (SELECT  project_id, estate_no, max(version) as max_version
                        FROM r_test
                        GROUP BY project_id,estate_no
                       ) sub_r_test 
ON (r_test.project_id = sub_r_test.project_id
    and r_test.estate_no = sub_r_test.estate_no
    and r_test.version = sub_r_test.max_version
   )

другим способом.состоит в том, чтобы использовать аналитические функции оракула, чтобы дать номер строки в каждой строке в соответствии с ее группой, в которой группа отсортирована в порядке убывания версий, а затем выбрать строки, которые имеют номер 1 (это будут строки с максимальной версией)

SELECT  project_id, version, ready_date, estate_no
FROM (SELECT project_id,
       version,
       ready_date,
       estate_no,
       row_number() over (partition by project_id,estate_no order by version desc) rn 
      FROM r_test
     )  
WHERE rn=1
0 голосов
/ 08 сентября 2011
  select  project_id, ready_date, version
  from r_test r
  where r.estate_no =  'c'
  and ready_date is not null
  and r.version = (select max(r2.version) from r_test r2 where r.project_id = r2.project_id )
  group by project_id, version, estate_no, ready_date

это похоже на работу, пока у проекта есть готовая дата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...