在另一个日期之前找到最短日期

时间:2016-05-31 02:08:45

标签: sql netezza

我们说我有两张桌子。一个是包含客户服务查询信息的表格,其中包含有关客户和查询时间的信息。保存客户的信息(在这种情况下,ID)以供将来查询。

CUST_ID     INQUIRY_ID      INQUIRY_DATE
001         34              2015-05-03 08:15
001         36              2015-05-05 13:12
002         39              2015-05-10 18:43
003         42              2015-05-12 14:58
003         46              2015-05-14 07:27
001         50              2015-05-18 19:06
003         55              2015-05-20 11:40

另一个表包含有关所有客户查询的解决日期的信息。

CUST_ID      RESOLVED_DATE
001          2015-05-06 12:54
002          2015-05-11 08:09
003          2015-05-14 19:37
001          2015-05-19 16:12
003          2015-05-22 08:40

分辨率表没有链接到除CUST_ID之外的查询表的密钥,因此为了计算解决时间,我想确定每个解决日期的解决方案之前的最短查询日期。结果表如下所示:

CUST_ID     FIRST_INQUIRY        RESOLVED_DT
001         2015-05-03 08:15     2015-05-06 12:54
001         2015-05-18 19:06     2015-05-19 16:12
002         2015-05-10 18:43     2015-05-11 08:09
003         2015-05-12 14:58     2015-05-14 19:37
003         2015-05-20 11:40     2015-05-22 08:40

刚开始我只用min(在INQUIRY_DATE< RESOLVED_DT的情况下),但是对于那些在不同日期有多个查询的客户001和003,查询将返回第一个查询日期,而不是第一个查询日期最后的询问。有谁知道如何做到这一点?我正在使用Netezza。

1 个答案:

答案 0 :(得分:0)

一个选项是为每个表(inquriesresolutions)创建子查询,该表使用日期为每个CUST_ID的事务编号。然后,可以使用此有序索引列以及CUST_ID将这两个子查询连接在一起。

我还使用了INQUIRY_ID表中的inquiries来打破平局,如果发生的话。根据您向我们展示的数据,无法在resolutions表格中针对特定客户和日期打破平局。

SELECT t1.CUST_ID, t1.INQUIRY_ID AS FIRST_INQUIRY, t2.RESOLVED_DATE AS RESOLVED_DT
FROM
(
    SELECT CUST_ID, INQUIRY_ID, INQUIRY_DATE,
        (SELECT COUNT(*) + 1
         FROM inquiries
         WHERE CUST_ID = t.CUST_ID AND INQUIRY_DATE <= t.INQUIRY_DATE
             AND INQUIRY_ID < t.INQUIRY_ID) AS index
    FROM inquiries AS t
) AS t1
INNER JOIN
(
    SELECT CUST_ID, RESOLVED_DATE,
        (SELECT COUNT(*) + 1
         FROM resolutions
         WHERE CUST_ID = t.CUST_ID AND RESOLVED_DATE < t.RESOLVED_DATE) AS index
    FROM resolutions t
) AS t2
    ON t1.CUST_ID = t2.CUST_ID AND t1.index = t2.index

以下是子查询表的样子:

<强>查询:

CUST_ID     INQUIRY_ID      INQUIRY_DATE         index
001         34              2015-05-03 08:15     1
001         36              2015-05-05 13:12     2
002         39              2015-05-10 18:43     1
003         42              2015-05-12 14:58     1
003         46              2015-05-14 07:27     2
001         50              2015-05-18 19:06     3
003         55              2015-05-20 11:40     3

<强>分辨率:

CUST_ID      RESOLVED_DATE        index
001          2015-05-06 12:54     1
002          2015-05-11 08:09     1
003          2015-05-14 19:37     1
001          2015-05-19 16:12     2
003          2015-05-22 08:40     2

请注意,此解决方案对于丢失数据不稳健,例如:有一项调查没有结束,或决议从未被记录。