【发布时间】:2016-03-12 04:28:52
【问题描述】:
我在一张表中有带有配置信息的实体。如果'vendor'在最后一次做的'reminder_days'内没有做某事,那么它就过期了。
CREATE TABLE t_vendors
(
vendor_id NUMBER,
vendor_name VARCHAR2 (250),
reminder_days NUMBER
);
Insert into T_VENDORS (vendor_id, vendor_name, reminder_days)
Values (12, 'sanity-test', 7);
应用程序将他们所做的事情记录到此表中,并使用此类数据:
CREATE TABLE t_vendor_events
(
vendor_event_id,
vendor_id NUMBER (19,0),
description VARCHAR2 (250),
event_date DATE
);
Insert into t_vendor_events (vendor_event_id, vendor_id, description, event_date)
Values (10015, 12, TO_DATE('11/9/2015 21:22:55', 'MM/DD/YYYY HH24:MI:SS'), 'one');
Insert into t_vendor_events (vendor_event_id, vendor_id, description, event_date)
Values (10016, 12, TO_DATE('11/16/2015 21:23:55', 'MM/DD/YYYY HH24:MI:SS'), 'two');
Insert into t_vendor_events (vendor_event_id, vendor_id, description, event_date)
Values (10017, 12, TO_DATE('11/30/2015 21:24:55', 'MM/DD/YYYY HH24:MI:SS'), 'three');
Insert into t_vendor_events (vendor_event_id, vendor_id, description, event_date)
Values (10018, 12, TO_DATE('12/01/2015 21:25:55', 'MM/DD/YYYY HH24:MI:SS'), 'four');
获得比较值后,我需要汇总数据以量化延迟:
- 发生了多少事件
- 逾期的频率
- 预期结果(提醒天数)
- 他们平均迟到了多少
- 他们在最坏的情况下迟到了多少(最大)
我需要查看结果中的所有供应商,包括那些根本无法产生事件的供应商。
我能想到的所有解决方案都涉及创建额外的列并在每个事件上存储某种“迟到”数据。这虽然让我觉得有点多余,因为我知道所需的时间间隔(reminder_days),但我不知道哪种嵌套选择会产生我需要的东西。
我更愿意坚持使用标准 SQL,而且我没有使用 PL-SQL,但可以在必要时在选择中使用 Oracle 特定的语法。
结果将如下所示(预期天数是“提醒天数”列):
Vendor Event Overdue Expected Avg Max
Count Count Days Elapsed Elapsed
Mega1 5 2 10 12 20
Ole! 6 0 10 9 10
GoPunk 0 0 0 0 0
X-Dan 0 0 0 0 0
RetroB 1 1 30 60 60
【问题讨论】:
-
您能否根据您的示例数据添加预期输出
-
@a_horse_with_no_name 我将 SQL 标准标签放在那里,因为我最好在寻找标准 SQL 解决方案而不是自定义 11g - 我认为我需要的标签应该是
Standard SQL但没有- 和SQL Standards听起来像是与 ANSI SQL 定义直接相关的问题,而不是实际的 SQL 问题,但没有描述 - 你知道更多吗? -
标签
sql已经引用了“标准/ANSI SQL”