MATCH 数据与日志事件

MATCH data with log events

我有一个 table events 看起来像这样:

我有一个 table contracts 看起来像这样:

我想通过查询向 contracts table 添加一列(布尔值)。新列 (evaluated) 即:

执行此操作的最巧妙方法是什么?一个左连接然后再 SELECT distinct 我们匹配的地方似乎是一种奇怪的方式。

所以,像这样:

SELECT t.sign_date,t.id,
       max(CASE WHEN s.id is null then 'false' else 'true' end) as boolCol
FROM contracts t
LEFT OUTER JOIN events s
 ON(t.id = s.id and sign_date - check_date between 0 and 3)
GROUP BY t.sign_date,t.id

您应该比较两个版本的解释(和资源使用情况),MAXDISTINCT

SELECT DISTINCT c.*,
   (CASE WHEN e.id IS NULL THEN 'N' else 'Y' end) AS boolCol
FROM contracts AS c
LEFT OUTER JOIN events AS e
  ON c.id = e.id 
     -- I simplified your date logic
 AND c.sign_date BETWEEN e.check_date - 3 AND e.check_date)

DISTINCT 更容易编写,优化器可能会自动将其替换为 GROUP BY 处理。