【发布时间】:2018-01-26 08:32:57
【问题描述】:
我正在尝试返回一个表格,该表格将广告表和网站流量表中的数据连接起来,两者都包含小时级别的数据。但是,在 ads 表中存在的特定日期的时间戳可能不存在于 website 表中。例如,时间戳“2017-09-27 20:00:00+00”存在于网站流量表中,但不存在于广告表中,反之亦然。
我正在使用一个选择 ads 表时间戳的查询,但使用的是左连接。完全外部连接似乎无法解决此问题,很可能是由于选择了广告时间戳而不是网站流量时间戳。
PostgreSQL 有没有办法在一个列中返回两个表的时间戳?
非常感谢。
当前使用的查询如下:
SELECT
ads.phase AS "phase",
ads.datetime_utc AS "datetime",
lower(array_to_string((regexp_split_to_array(ads.placement, '_'))[1:9], '_')) AS "delim_dims",
a.name AS " name",
ads.device AS "device",
sum(ads.impressions) AS "impressions",
sum(ads.clicks) AS "clicks",
sum(ads.spend) AS "spend",
web.sessions AS "sessions",
web.bounces AS "bounces"
FROM
ads_data AS ads
INNER JOIN
lookup.names_lookup AS a ON
ads.lookup_code = a.lookup_code
LEFT JOIN -- tested with FULL OUTER JOIN, returns same results
web.website_traffic AS web ON
ads.datetime_utc = web.datetime_est
AND
a.lookup_code = web.lookup_code
AND
ads.device = web.device
GROUP BY
ads.phase,
datetime,
delim_dims,
a.audience_name,
web.sessions,
web.bounces,
device
HAVING
sum(ads.spend) > 0
【问题讨论】:
-
coalesce(first_ts,next_ts,default_ts)会有所帮助 -
感谢合并建议。我测试了它,但它仍然没有返回我正在寻找的记录。
-
请保持建设性。准确的说法。确切的结果。确切的期望。
-
请您做一些练习来提供示例数据和所需的输出吗?
-
我暂时不在,但我几乎可以肯定这与 HAVING 子句有关。
标签: sql postgresql