为每个联系人选择最早的日期

时间:2019-09-17 12:54:30

标签: sql sql-server sql-server-2005

我有以下查询,它应该只为每个联系人拉最早的日期,但是它拉所有可用的日期。我在这里检查了多个线程,但无法解决。 这是使用SQL Server 2005。

SELECT DISTINCT o.SubscriberKey, MIN(o.EventDate) as OpenDate
FROM _Open o 
INNER JOIN _Job j
    ON o.JobID = j.JobID
GROUP BY o.SubscriberKey, o.EventDate

目前,我正在获得如下结果:

Subscriber 1  17 July 2019 06:04
Subscriber 1  17 July 2019 06:05
Subscriber 1  18 July 2019 04:29
Subscriber 2  18 July 2019 07:04
Subscriber 2  18 July 2019 07:21
Subscriber 2  24 July 2019 05:40

我想实现的目标:

Subscriber 1  17 July 2019 06:04
Subscriber 2  18 July 2019 07:04

3 个答案:

答案 0 :(得分:2)

SELECT 
     --you dont want to have a DISTINCT here, you are doing a GROUP BY so its not needed 
    --DISTINCT
    o.SubscriberKey
    , MIN(o.EventDate) as OpenDate
FROM _Open o 
    --Join is not referenced. Thanks @Gordon Linoff
    --INNER JOIN _Job j
    --    ON o.JobID = j.JobID
GROUP BY
    o.SubscriberKey
    --dont group on Event date, this is stopping the MIN function from aggregating the rows.
    --, o.EventDate

答案 1 :(得分:2)

您不需要JOIN。而且您需要修复GROUP BY

SELECT o.SubscriberKey, MIN(o.EventDate) as OpenDate
FROM _Open o 
GROUP BY o.SubscriberKey;

如果要过滤结果,则只需要JOIN,但我怀疑是这样。

答案 2 :(得分:1)

您只需要group by SubscriberKey并在EventDate上进行汇总。
另外,您正在加入_Job,但不使用它。
除非您只想获得表中匹配行中的最小EventDate,否则就不需要此连接:

SELECT SubscriberKey, MIN(EventDate) as OpenDate
FROM _Open 
GROUP BY SubscriberKey
相关问题