2016-12-02 7 views
-1

Я пытаюсь написать запрос, который найдет максимальную дату истечения срока действия, но то, что я заметил, когда я делаю это, я не получаю никаких результатов, если у меня есть срок годности, скажем, 30- Dec-16, и для той же части у меня также есть дата истечения срока 01-янв-2099 (которая является датой по умолчанию, если ничего не заполняется) ниже, это мой запрос, как я могу переписать запрос expiration_date, чтобы получить правильную дату.SQL Query> sysdate <Sysdate + 1 год

SELECT 
Part, 
price, 
effective_date, 
expiration_date 
FROM a.Table 
WHERE Part IN ('&Part') 
AND PRICE IN ('somewere') 
AND expiration_date IN (SELECT 
          MAX(expiration_date) 
          FROM table 
          WHERE expiration_date > SYSDATE 
          AND part IN ('&Part) 
          AND PRICE IN (Somewere)) 
AND to_date(effective_date) IN (SELECT 
            MAX(EFFECTIVE_DATE) FROM b.table 
            WHERE expiration_date > SYSDATE 
            AND Part IN ('&Part) 
            AND price IN (somewere) 
            AND EFFECTIVE_DATE < SYSDATE + 1) 
+0

Образец данных из каждой таблицы вместе с желаемыми результатами поможет. –

+0

Добавьте дополнительную информацию, включая образцы и ожидаемый результат! –

+0

Извините, я забыл вытащить эту внутреннюю связь. Мне это не нужно. Примеры данных: Яблоки 7.95 1-Dec-16 30-Dec-16 Яблоки 7.95 1-Nov-16 30-Nov-16 Яблоки 7.95 30-Dec-16 01-Jan-2099 Я ищу его, чтобы дать мне Это для результатов Яблоки 7.95 1-Dec-16 30-Dec-16 – Nichole

ответ

0

Я бы использовал ROW_NUMBER. https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions137.htm

Вот запрос:

SELECT 
    part 
    ,price 
    ,effective_date 
    ,expieration_date 
FROM (
    SELECT 
     part 
     ,price 
     ,effective_date 
     ,expieration_date 
     ,ROW_NUMBER() OVER (PARTITION BY part ORDER BY expieration_date DESC) AS "row" 
    FROM @tbl 
    WHERE effective_date < SYSDATE + 1 
    ) tbl 
WHERE "row" = 1 

Вот что я для заполнения @tbl.

DECLARE @tbl TABLE (
part NVARCHAR(MAX) 
,price FLOAT 
,effective_date DATETIME2(3) 
,expieration_date DATETIME2(3) 
) 

INSERT @tbl (part, PRICE, EFFECTIVE_DATE, EXPIERATION_DATE) 
VALUES ('Apples',7.95,'2016-12-01','2016-12-30') 
    ,('Apples',7.95,'2016-11-01','2016-11-30') 
    ,('Apples',7.95,'2016-12-30','2099-01-01') 
+0

Я получаю «От ключевого слова не найдено ожидалось» в строке ROW_NUM – Nichole

+0

Я выполняю свой запрос в oracle sql-разработчике – Nichole

+0

К сожалению, Oracle SQL Developer требует " "при объявлении имен столбцов. Обновлен запрос. Пока вы заменяете @tbl своей таблицей, все остальное должно работать. –