每个记录
问题描述:
甲骨文选择最高的日期,我有点难倒就如何做到这一点。我想从表“代理”中选择记录,并将这两个表共享一个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天内没有注释的任何代理机构,显示地址和名称以及最后一个注释日期。 (而不是显示每次访问后的天数,我想显示自上次访问以来已经过去的天数 - 每个不同的机构,街道,城市)。
这是一个应用程序,它可以帮助销售主管安排销售电话并每周运行两次。我一直无法弄清楚。另外,请记住,使用的实际表格更具描述性 - 我在这里使用的仅仅是描述问题所需的部分。
我将不胜感激就如何解决这个问题的任何建议。
谢谢!
答
如果我正确理解你的问题,将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;
谢谢!我将不得不阅读关于NOT EXISTS条件的更多信息,以便我可以更好地理解它。非常感激! – Jinx3y 2011-06-05 21:06:16