2011-06-05 88 views
1

甲骨文選擇最高的日期,我有點難倒就如何做到這一點。我想從表「代理」中選擇記錄,並將這兩個表共享一個id列的表「記錄」。每個記錄

表結構:

create table notes (
    notes_id varchar2(5), 
    agency_gp_id varchar2(5), 
    call_date date, 
    call_note varchar2(4000) 
); 

create table agency(
    agency_id varchar2(5), 
    agency_name varchar2(5), 
    street varchar2(75), 
    city varchar2(50) 
); 

alter table notes add constraint "fk_group_notes_agency_id" foreign key(agency_gp_id) 
    references agency(agency_id) enable; 

- 每個表有自動編號,「之前,插入」觸發所以ID號保持同步(與其他東西一起在添加註釋到新的情況下,創建代理) - 我需要它做的一切(數據庫),它的確如此。從機構表

- 每個記錄都有一個獨特的名稱/地址組合(在不同的城市不同的分支),從票據表中每條記錄都有對應於每個機構的日期條目。

,高級別的機構可以有多個筆記(來自後續訪問多個筆記詳細)

什麼,我試圖做的是選擇每個(不同的機構,街道,市)一直沒有一個音符內添加到它過去四個月。

這是我想出了查詢:

SELECT count(a.agency_name) as number_of_visits, 
    a.agency_name, 
    (a.street||', '||a.city) as "Location", 
    n.call_date, 
    ROUND(TRUNC(sysdate - call_date)) AS days_since_visit 
FROM notes n, agency a 
WHERE (sysdate - n.call_date) > 120 
    AND n.agency_gp_id = a.agency_id 
    --AND a.city = 'München' --not necessary, used for limiting number of results 
GROUP BY n.call_date,a.agency_name,a.street, a.city 
ORDER BY a.agency_name ASC, n.call_date desc; 

這樣的作品...我可以看到我想要什麼,但我也看我不想要的東西(例如,在各機構的多個音符)。我唯一想看到的是每個機構的最後一項(根據WHERE子句最近)。我想要創建的圖片是:對於在最後一個註釋的120天內沒有註釋的任何代理機構,顯示地址和名稱以及最後一個註釋日期。 (而不是顯示每次訪問後的天數,我想顯示自上次訪問以來已經過去的天數 - 每個不同的機構,街道,城市)。

這是一個應用程序,它可以幫助銷售主管安排銷售電話並每週運行兩次。我一直無法弄清楚。另外,請記住,使用的實際表格更具描述性 - 我在這裏使用的僅僅是描述問題所需的部分。

我將不勝感激就如何解決這個問題的任何建議。

謝謝!

回答

1

如果我正確理解你的問題,將call_date更改爲MAX(call_date)(並從GROUP BY語句中刪除它)應該能夠得到你想要的數據,但也會導致誤報,即任何代理無論最近的筆記如何,它的筆記都超過120天。如果我們在NOT EXISTS子查詢中過濾這些代理,那應該讓你去你需要的地方。

SELECT count(a.agency_name) as number_of_visits, 
    a.agency_name, 
    (a.street||', '||a.city) as "Location", 
    MAX(n.call_date), 
    ROUND(TRUNC(sysdate - MAX(call_date))) AS days_since_visit 
FROM notes n, agency a 
WHERE (sysdate - n.call_date) > 120 
    AND n.agency_gp_id = a.agency_id 
    AND NOT EXISTS (SELECT 1 FROM notes n2 
        WHERE n2.agency_gp_id = a.agency_id 
        AND (sysdate - n2.call_date) <= 120) 
    --AND a.city = 'München' --not necessary, used for limiting number of results 
GROUP BY a.agency_name,a.street, a.city 
ORDER BY a.agency_name ASC, MAX(n.call_date) desc; 
+0

謝謝!我將不得不閱讀關於NOT EXISTS條件的更多信息,以便我可以更好地理解它。非常感激! – Jinx3y 2011-06-05 21:06:16