2016-07-22 5 views
0

に係る全体の行の特定の情報を選択し、SQL:は、私は、次の表の情報を持っている別の列

Location_id | Date_1 | Ex_Start | EX_End | Condition | Price 
------------+------------+-------------+-----------------------+------- 
    L_1  | 23-JUL-16 | 08-JUN-16 | 25-JUL-16 | EX  | 109 
    L_1  | 23-JUL-16 | 28-JUL-16 | 31-JUL-16 | Non_EX | 109 
    L_1  | 24-JUL-16 | 08-JUN-16 | 25-JUL-16 | EX  | 89 
    L_1  | 24-JUL-16 | 28-JUL-16 | 31-JUL-16 | Non_EX | 89 
    ...   ...   ...   ...  ...  
    L_2  | 23-JUL-16 | 24-JUL-16 | 15-AUG-16 | Non_EX | 99 
    L_2  | 23-JUL-16 | 26-OCT-16 | 29-JAN-17 | Non_EX | 99 
    L_2  | 24-JUL-16 | 24-JUL-16 | 15-AUG-16 | EX  | 79 
    L_2  | 24-JUL-16 | 26-OCT-16 | 29-JAN-17 | Non_EX | 79 
    ...   ...   ...   ...  ... 

「日付1」は、現在の日付と同じ日付来年です。 "条件"列の "EX"は、 "EX_Start"と "Ex_End"の間の "EX_Start"と "EX_End"の間に "Date_1"が入ることを意味します。 "Condition"列の "Non_EX" すべてのLocation_idで特定のDate_1情報を選択したいのですが、同じ日付の各場所に1つの "Ex"がある場合、条件は "EX"を返します。そうでない場合は "Non_EX 。。」

たとえば、この表には戻ります:

Location_id | Date_1 | Condition | Price 
------------+------------+-------------+----------------------- 
    L_1  | 23-JUL-16 | EX   | 109 
    L_1  | 24-JUL-16 | EX   | 89 
    ...   ...   ...   ... 
    L_2  | 23-JUL-16 | Non_EX  | 99 
    L_2  | 24-JUL-16 | EX   | 79 
    ...   ...   ...   ... 

おかげ

+0

これはどのデータベース(バージョン)ですか?これまでに何を試しましたか? – Abecee

+0

これはOracle SQL Developer 4.1.3上にあり、価格をテーブルに入れる方法がわからないため、まだ試していません。 –

答えて

0

THI!あなたのケースでうまくいくでしょう、試してみてください。

SELECT location,date1, min(condition),Price 
from location group by location, date1,Price 

価格も含まれています。

+0

ありがとう、それは動作します!しかし、どのようにしてテーブルに「価格」の情報を入れることができますか? –

0

価格が同一で位置DATE_1の組み合わせごと場合、@Prashant Majhwarに従います。しかし、価格は、それぞれのEXNon_EX間で異なる可能性がある場合、あなたは

WITH 
Data_Raw (location_ID, date_1, ex_Start, ex_End, condition, price) AS (
    SELECT 'L_1', '23-JUL-16', '08-JUN-16', '25-JUL-16', 'EX', 109 FROM DUAL UNION ALL 
    SELECT 'L_1', '23-JUL-16', '28-JUL-16', '31-JUL-16', 'Non_EX', 110 FROM DUAL UNION ALL 
    SELECT 'L_1', '24-JUL-16', '08-JUN-16', '25-JUL-16', 'EX', 89 FROM DUAL UNION ALL 
    SELECT 'L_1', '24-JUL-16', '28-JUL-16', '31-JUL-16', 'Non_EX', 90 FROM DUAL UNION ALL 
    SELECT 'L_2', '23-JUL-16', '24-JUL-16', '15-AUG-16', 'Non_EX', 99 FROM DUAL UNION ALL 
    SELECT 'L_2', '23-JUL-16', '26-OCT-16', '29-JAN-17', 'Non_EX', 99 FROM DUAL UNION ALL 
    SELECT 'L_2', '24-JUL-16', '24-JUL-16', '15-AUG-16', 'EX', 79 FROM DUAL UNION ALL 
    SELECT 'L_2', '24-JUL-16', '26-OCT-16', '29-JAN-17', 'Non_EX', 80 FROM DUAL 
), 
Data (location_ID, date_1, ex_Start, ex_End, condition, price) AS (
SELECT 
    location_Id, TO_DATE(date_1, 'DD-MON-RR'), TO_DATE(ex_Start, 'DD-MON-RR') 
    , TO_DATE(ex_End, 'DD-MON-RR'), condition, price 
FROM Data_Raw 
) 
SELECT DISTINCT 
    M.location_ID 
    , TO_CHAR (M.date_1, 'DD-MON-RR') date_1 
    , M.condition 
    , D.price 
FROM 
    (SELECT 
    location_ID 
    , date_1 
    , MIN(condition) condition 
    FROM Data 
    GROUP BY location_ID, date_1 
) M 
JOIN Data D 
    ON M.location_ID = D.location_ID 
    AND M.date_1 = D.date_1 
    AND M.condition = D.condition 
ORDER BY location_id, date_1 
; 

に沿ってそれをしようとする場合があります:

  • は指名手配にズームインする副選択を使用しています条件
  • 価格を引き上げるにはデータに戻ってください(他のcol umnsとしても - Non_EX

のための重複行を防ぐために、あなたの質問のタイトルにより示唆されるように)、および

  • DISTINCT Sこれは調整/さらに詳細が必要な場合としてコメントしてください。

  • +0

    ええ、それは動作します! –

    関連する問題