1

我正在尝试编写一个配置单元查询,我对同一个表中的两个不同偶数类型之间的关系感兴趣。例如,假设我的表是这样构建的:

event_type     timestamp             source
completion     2013-03-04 12:00:55   NULL
completion     2013-03-04 11:55:55   NULL
impression     2013-03-04 11:53:45   A
impression     2013-03-04 11:57:55   A
impression     2013-03-04 11:58:00   B

对于每次完成,我想获取最近一次展示的时间戳及其来源。例如,我希望从对上述示例的查询中得到的是:

completion_timestamp    most_recent_impression    source
2013-03-04 12:00:55     2013-03-04 11:58:00       B
2013-03-04 11:55:55     2013-03-04 11:53:45       A

有小费吗?

4

1 回答 1

1

这依赖于时代的独特性。您可能应该添加一个 id 列来解决这个问题。

子查询获取每个完成时间 ( ) 和完成时间 ( )之前GROUP BY c.ts的最新展示时间( )。MAX(i.ts)i.ts < c.ts

SELECT
  completionTime, impressionTime, s.source
FROM
(SELECT
  c.ts AS completionTime, MAX(i.ts) AS impressionTime
FROM t AS c
JOIN t AS i
WHERE c.event_type = 'completion'
AND i.event_type = 'impression'
AND i.ts < c.ts -- impressions happen before completions
GROUP BY c.ts) AS t2
JOIN t AS s ON s.ts = t2.impressionTime
ORDER BY completionTime DESC

好的 ole SQLFiddle

于 2013-03-05T22:57:13.750 回答