2017-03-16 154 views
-1

我有日期範圍(例如「20170301」和「20170701」)和表:數日甲骨文

id name start end 
1 first 2017-01-01 2017-10-01 (yyyymmdd) 
2 second 2017-02-01 2017-02-01`` 
3 third 2017-02-01 2017-06-01 

我都數不過來是否有來自範圍內每天或某些事件不 和回報這些日期。

如20170301 - 有兩個事件 - >數= 2 - >選擇這個 20170401 - 2 ... ... 20170701 - 沒有活動 - >數= 0 - >不選擇此

我的查詢只包括起始日期:

select to_char(t.start_date, 'yyyymmdd') as DAY 
from table t 
where to_char(t.start_date, 'yyyymmdd') between 20170301 and 20170304 
group by to_char(t.start_date, 'yyyymmdd') 
having count(*) > 0 

我應該通過我的輸入範圍中的每一天小組要弄清楚是否有對的範圍內,每天至少一個事件。 (範圍內每天增加的某種組)。

是否有可能兩個工具,或者你可以推薦不同的方法?

+0

你爲什麼叫喊?當你看到主頁面時,你會發現有多少個問題是你在哪裏看到人們都在用什麼方式發送?答案:除你的之外沒有任何答案。原因:這很粗魯,它會讓你的問題更難閱讀,而且它不會讓你更快得到答案。鍵盤上有兩個Shift鍵,兩側各有一個Shift鍵,以便於使用,因爲這樣可以提高可讀性。請擺脫現在發出你的問題的習慣。謝謝。 –

+0

我沒有發佈答案。我在這裏提到了您的行爲問題,並編輯了您的帖子以刪除不適當的內容。您的評論在回覆中沒有任何價值。 –

回答

0

使用遞歸子查詢保條款:

甲骨文設置

CREATE TABLE table_name (id, name, start_date, end_date) AS 
    SELECT 1, 'first', DATE '2017-01-01', DATE '2017-10-01' FROM DUAL UNION ALL 
    SELECT 2, 'second', DATE '2017-02-01', DATE '2017-02-01' FROM DUAL UNION ALL 
    SELECT 3, 'third', DATE '2017-02-01', DATE '2017-06-01' FROM DUAL; 

查詢

WITH calendar (day) AS (
    SELECT DATE '2017-03-01' FROM DUAL 
UNION ALL 
    SELECT day + 1 FROM calendar WHERE day < DATE '2017-07-01' 
) 
SELECT day, COUNT(id) 
FROM calendar 
     INNER JOIN 
     table_name 
     ON (day BETWEEN start_date AND end_date) 
GROUP BY day 
ORDER BY day;