我有以下查询,它应该只为每个联系人拉最早的日期,但是它拉所有可用的日期。我在这里检查了多个线程,但无法解决。 这是使用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
答案 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