2016-12-02 8 views
-1

最大有効期限を見つけるクエリを作成しようとしていますが、これを行うときに気付いたのは、有効期限がある場合に結果が得られないということです。 12月16日と同じ部分については、私も有効期限が01 - Jan - 2099(何も記入されていない場合のデフォルトの日付です)ですが、私のクエリは正しいdateを取得するためにexpiration_dateクエリを書き直すことができます。SQLクエリ> 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

申し訳ありません私はそのインナーを引き出すのを忘れています。参加する必要はありません。サンプルデータは次のとおりです:Apples 7.95 1-Dec-16 30-Dec-16 Apples 7.95 1-Nov-16 30-Nov-16 Apples 7.95 30-Dec-16 01-Jan-2099私はそれを求めていますこれは結果のためにApples 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 Developerでクエリを実行しています – Nichole

+0

申し訳ありませんが、 "列名を宣言します。クエリを更新しました。 @tblをあなたのテーブルに置き換えている限り、他のものはすべて動作するはずです。 –

関連する問題