2013-02-20 70 views
3

我有一個Oracle表數據像下面之間只有特定的天數:查找兩個日期

1. ID   DATE 
2. 12   02/11/2013 
3. 12   02/12/2013 
4. 13   02/11/2013 
5. 13   02/12/2013 
6. 13   02/13/2013 
7. 13   02/14/2013 
8. 14   02/11/2013 
9. 14   02/12/2013 
10. 14   02/13/2013 

我需要找到只有那些ID誰擁有隻在週一,週二和週三的日期,所以這裏只ID = 14應該返回。我正在使用Oracle,日期格式爲MM/DD/YYYY。 請指教。

問候, 尼廷

+1

你是日期實際日期(按數據類型)還是他們的字符串格式爲MM/DD/YYYY? – Viehzeug 2013-02-20 06:30:09

+0

當處理SQL時,如果你給我們一些代碼來創建你正在使用的表而不是ASCII錶轉儲,它通常會有所幫助。 – Joey 2013-02-20 08:10:56

回答

1

這樣做

SELECT * FROM your_table t 
     where to_char(t.DATE, 'DY') in ('whatever_day_abbreviation_day_you_use'); 

相反,如果你願意,你可以使用天數,如:

SELECT * FROM your_table t 
    where to_number(to_char(d.ts, 'D')) in (1,2,3); 

,如果你想避免重複ID添加DISTINCTION

SELECT DISTINCT ID FROM your_table t 
    where to_number(to_char(d.ts, 'D')) in (1,2,3); 
+0

這些將返回也ID:12,13 – 2013-02-20 06:46:10

+0

您的條件是「......只有星期一,星期二和星期三日期」;井2/11和2/12是週一和週二...... – i100 2013-02-20 07:07:25

+1

是OP條件,不是我的。再次閱讀他的要求。他想要那些三天只有三天的ID。不只是兩個,而是不同的一天。 – 2013-02-20 07:16:08

4

如果日期欄是日期數據類型,那麼你可以

select id 
from your_table 
group by id 
having sum(case 
      when to_char(date_col,'fmday') 
       in ('monday','tuesday','wednesday') then 1 
      else 99 
      end) = 3; 

編輯Corected在IGR的觀察

上面的代碼,但這個是確定只有當你沒有一天不同一個ID兩次。

如果列VARCHAR2則條件變得to_char(to_date(your_col,'mm/dd/yyyy'),'fmday') in ...

更健壯的代碼如下:

select id 
from(
    select id, date_col 
    from your_table 
    group by id, date_col 
) 
group by id 
having sum(case 
      when to_char(date_col,'fmday', 'NLS_DATE_LANGUAGE=ENGLISH') 
        in ('monday','tuesday','wednesday') then 1 
      else 99 
      end) = 3; 
+0

此解決方案不會取決於您正在使用的語言設置嗎? – Rene 2013-02-20 06:46:07

+0

這不重要,也不是用戶的問題。他只想知道如何選擇具有該屬性的ID。 – 2013-02-20 06:48:25

+0

不幸的是,系統之間的設置會有所不同。因此,如果有一個解決方案不依賴於這些設置,請使用該解決方案。總是。 – Rene 2013-02-20 06:54:20

1
select id 
from (
    select 
    id, 
    sum (case when to_char(dt, 'D', 'nls_territory=AMERICA') between 1 and 3 then 1 else -1 end) AS cnt 
    from t 
    group by id 
) 
where cnt=3 

注:我假定(ID,DT)是獨一無二的 - 沒有兩行具有相同的ID和日期。

+3

星期一是星期幾的第一天。這取決於nls_territory。 – 2013-02-20 07:22:07

+2

@igr,你還需要在內部選擇 – 2013-02-20 07:43:15

+0

「由ID編組」。感謝這兩個建議 - 我做了一個改變。 – igr 2013-02-20 08:54:38